原型链
- 寻值方式
构造函数是个函数,实例是个对象
实例: 自身->构造函数的prototype->构造函数的prototype的构造函数的prototype- prototype
本身也是一个实例,所以可以用另一个实例来代替它作为原型链的一环
传统继承模式
Son.prototype = Father.prototype
缺点:当修改Son的prototype时,也会影响到Father的prototype
圣杯模式
function buffer(){}
buffer.prototype = Father.prototype;
Son.prototype = new buffer(); //当修改Son.prototype时,只会修改一个buffer实例;
Son.prototype.constructor = Son; //实例buffer中没有constructor
Son.prototype.father = Father; //用一个值来保存父亲
封装为函数
使用立即执行函数的原因:
制作一个 上级作用域有一个Buffer函数的 函数
使每次调用inherit函数时,不用再定义一个函数Buffer,而直接使用上级作用域的
var inherit = (function(){
function Buffer(){}
return function(target,origin){
buffer.prototype = origin.prototype;
target.prototype = new buffer();
}
})();
参考文章:11.原型链的一个重要应用:圣杯模式