1传统模式——原型链 Father.prototype.name="deng" function Father(){ } var father=new Father() var son=new Father() father.name //deng son.name //deng
过多的继承了没用的属性。
2、借用构造函数 call、apply
function Person(name,age){
this.name=name;
this.age=age;
}
var person=new Person('zhangsan',15);
var obj1={}
Person.call(obj1,'wangmazi',29)
console.log(obj1) //{name: "wangmazi", age: 29}
不能继承借用的构造函数的原型
多执行一个函数
3.共享原型
function Father(){}
function Son(){}
Father.prototype.lastName = 'deng';
Son.prototype = Father.prototype;
var son = new Son();
son.lastName //'deng'
不能随便改动自己的原型,因为指向同一个空间。
4.圣杯模式 基于共享原型的基础上增加一个中间层
function Father(){}
function Son(){}
Father.prototype.lastName = 'qin';
var extend = (function(){
var Mid = function(){}
return function (Target, Origin){
Mid.prototype = Origin.prototype;
Target.prototype = new Mid();
Target.prototype.constructor = Target
}
}())
extend(Son, Father);
var son = new Son();
Son.prototype.firstName="333" 给Son的原型上添加属性不影响Father的原型