最近发现有些概念都混淆了,重新回去查了下资料,做个记录。
1、原型继承
(1)、将对象指定为另一对象的原型,即可让该对象拥有另一对象的属性
不光光是属性,方法也可以使用。
//创建构造函数 function Person(){} //创建对象,并手动指定其constructor为Person var human = { constructor: Person, name: "jack", age: 18, gender: "male", say:function(){ console.log("sayxxx") } }; //指定构造函数Person的原型为human Person.prototype = human; //利用Person构造函数,创建实例化对象,该对象将会同时拥有Person和human的属性 var p = new Person(); console.log(p.name); console.log(p.say());
(2)、将对象的属性混入到原型中
function Person(){} Person.prototype.extend = function (obj) { //本方法中的 this 指向的就是 Person.prototype for(var k in obj){ this[k] = obj[k]; } }; var human = { name: "jack", age: 18, gender: "male" }; Person.prototype.extend(human); //这里的extend相当于for-in语法 // for(var k in human){ // Person.prototype[k] = human[k]; // } var p = new Person();
2、经典继承
Object.create() //这个方法有兼容性问题 var obj = Object.create(obj1); //创建一个对象obj, 让obj1作为obj的原型
3、混入式继承(mix-in)
for(var k in obj1){ obj[k] = obj1[k]; }