原型链
原型链的继承
- 方式一:
//直接封装一个继承函数
function inherit(Target, Origin) {
Target.prototype = Origin.prototype;
}
inherit(Son, Father);
- 方式二:
圣杯模式
//引入一个函数F(),充当中间量
function inherit(Target, Origin) {
function F() {
F.prototype = Origin.prototype;
Target.prototype = new F();
Target.prototype.constuctor = Target; //把目标的constuctor改到他本身上
Target.prototype.uber = Origin.prototype;
}
}
function Father() {}
function Son() {}
inherit(Son, Father);
var son = new Son();
var father = new Father();
Son.prototype.sex = male;
- 推荐使用的方法:
var inherit = (function () {
var F = function () {};
return function (Target, Origin) {
F.prototype = Origin.prototype;
Target.prototype = new F();
Target.prototype.constuctor = Target; //把目标的constuctor改到他本身上
Target.prototype.uber = Origin.prototype;
};
})();
相比较而言,方式 1 的话 Son 与 Father 的原型指向的地址是同一个,如果想要给 Son 添加,那么 Father 也会受到影响。