當需要繼承一個原型方法,又不需要用到A構(gòu)造函數(shù)內(nèi)的屬性時
如果使用B.prototype = A.prototype 會相當于引用同一個地址
如果修改B.prototype 會引起A.prototype 一起改變
使用一個緩沖構(gòu)造器酵紫,賦予目標原型實例
/**
* 繼承 prototype 不會繼承構(gòu)造器內(nèi)容 && 只繼承原型方法告嘲,不使用同一引用
*
* @param {Target, Origin} 目標, 繼承自
*/
const inherit = (function () {
return function (Target, Origin) {
function Buffer() {}
Buffer.prototype = Origin.prototype;
let buffer = new Buffer();
Target.prototype = buffer;
Target.prototype.constructor = Target;
Target.prototype.super_class = Origin;
};
})();
function A(opt) {
this.name = opt.name;
}
A.prototype.log = function () {
console.log(`這是log!`);
};
function B() {}
inherit(B, A);
let b = new B();
console.log(b)
結(jié)果
補充幾個關(guān)于原型的語句