标签:
面向对象:不了解原理的情况下,会使用功能。如:电视机,不清楚原理,却知道如何操作。面向对象是一种通用的思想,并非只有在编程使用。面向对象编程简称OOP。
js是一个基于原型的面向对象的编程语言,即每个对象有一个原型对象,对象从原型中继承属性和方法。
js的原型的关系是递归的。即,对象的原型也是一个对象,而原型的本身可能还有一个原型。
js中的对象使用一个new 运算符和一个构造函数来创建
js中可以给对象动态的添加属性和方法
js中创建对象的方法有多种,包括:原型方式,动态原型方式,工厂方式等等
实现继承机制的方式有多种,包括:对象冒充,call(),apply(),原型链等等
多用原型来创建对象
prototype对象是个模板,要实例化的对象都以这个模板为基础,总而言之,prototype对象的任何属性和方法都被传递给那个类的所有实例。原型链利用这种功能来实现继承机制
//构造函数,用来产生对象 | |
//定义一个对象 | |
function People(name,age){ | |
//属性 | |
this.name = name; | |
this.age = age; | |
//一个方法 | |
this.run = function(){ | |
alert(this.name + "paopaoapo"); | |
} | |
} | |
// People.prototype.qq="12345";//给People原型添加属性qq | |
// var p1=new People("小明",18);//存储的内存地址 | |
// p1.age=25; | |
// var p2=new People("小明2",19);//p1、p2是两个不同对象 来自同一个原型 | |
// p1.sex="男"; | |
// alert(p1.name + " " + p1.age +" " + p1.sex+" "+p1.qq+" " +p2.name + " " + p2.age+" " + p2.sex+" "+p2.qq); | |
// p1.run(); | |
// p2.run(); | |
function Man(name,age){ | |
this.fight="PK"; | |
//调用父类的构造函数传参《不需要传参数就可以不用》 | |
this.constructor(name,age); | |
//对象冒充法一 | |
// this.inherit = People;//模拟继承 调用People函数 | |
// this.inherit(name,age);//执行People | |
// delete this.inherit;//删除inherit属性 | |
//对象冒充法二 | |
// People.call(this,name,age);//this表示Man对象 | |
//对象冒充法三 | |
// People.apply(this,[name,age]);//this表示Man对象,和call不一样的是传参数方式 | |
// | |
} | |
Man.prototype = new People();//Man的prototype<原型>为People 真实继承 原型链 | |
var m1=new Man("大胖",56); | |
// m1.run(); | |
console.log(m1); | |
// console.log(m1 instanceof Man);//对象冒充法一二三 真实继承为true | |
console.log(m1.constructor); | |
// 打出function People(name,age){ | |
// //属性 | |
// this.name = name; | |
// this.age = age; | |
// //一个方法 | |
// this.run = function(){ | |
// alert(this.name + "paopaoapo"); | |
// } | |
// } | |
console.log(m1 instanceof People); //对象冒充法一二三为false 真实继承为true | |
// console.log(m1.__proto__.__proto__.__proto__.__proto__);//__proto__和prototype一样的 |
function Animal(name,age,color){ | |
this.name = name; | |
this.age = age; | |
this.color = color; | |
} | |
function Dog(name,age,color){ | |
this.dog = "狗狗"; | |
this.constructor(name,age,color); | |
} | |
function Cat(name,age,color){ | |
this.cat = "猫"; | |
this.constructor(name,age,color); | |
} | |
Dog.prototype = new Animal(); | |
Cat.prototype= new Animal(); | |
var d1 = new Dog("狗小黄",2,"green"); | |
var d2 = new Dog("狗小黄2",22,"green2"); | |
console.log(d1); | |
console.log(d2); |
标签:
原文地址:http://www.cnblogs.com/yyan/p/4803686.html