1 回答

TA貢獻1804條經(jīng)驗 獲得超7個贊
至少有一個很好的理由:該功能已被棄用,因此您不應(yīng)將其用于將來的兼容性。__proto__
我建議閱讀有關(guān)該主題的MDN頁面,如果您正在學(xué)習(xí),還可以閱讀有關(guān)繼承的鏈接頁面。
有用的附加說明:使用是一種以原型方式模擬類繼承的方法(b從a繼承),而無需調(diào)用“父”(a)構(gòu)造函數(shù)。如果您希望使用調(diào)用的“父”構(gòu)造函數(shù)模擬繼承,則可以使用b.prototype = Object.create(a.prototype);
b.prototype = new a();
當然,它是對類行為的模擬,它在細節(jié)上有所不同,因為原型不是類,例如,您可以在創(chuàng)建實例后將函數(shù)動態(tài)添加到 的原型中,并且新函數(shù)將可用于該實例,因為它通過引用工作。以類似的方式,第二個示例不會為每個后續(xù)實例執(zhí)行 的構(gòu)造函數(shù),而是在將其分配給 的原型時只執(zhí)行一次。a
b
a
b
實際上,當你了解原型時,我發(fā)現(xiàn)它們真的很強大,允許許多組合。
function a () {
console.log('a constructor');
}
a.prototype.prtSomething = function(arg) { console.log(arg); }
function b () {
console.log('b constructor');
}
b.prototype = Object.create(a.prototype);
b.prototype.constructor = b;
var myObj = new b();
展開代碼段
function a () {
console.log('a constructor');
}
a.prototype.prtSomething = function(arg) { console.log(arg); }
function b () {
console.log('b constructor');
}
b.prototype = new a();
b.prototype.constructor = b;
var myObj = new b();
添加回答
舉報