簡體   English   中英

從子對象調用父母構造函數和原型

[英]Call parents constructor and prototype from child object

我試圖理解在JavaScript中調用構造函數和原型方法的方法。

這是我的嘗試:

function A() {
    this.getId = function() {
        console.log('A constructor - getId');
    }
}
A.prototype.getId = function() {
    console.log('A prototype - getId');
}
function B() {
    A.call(this);
    this.getId = function() {
        console.log('B constructor - getId');
    }
}
B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;

B.prototype.getId = function() {
    console.log('B prototype - getId');
}
var p = new A();
var q = new B();

p.getId()
//A constructor - getId 

q.getId()
//B constructor - getId

p.constructor.prototype.getId()
//A prototype - getId 

q.constructor.prototype.getId()
//B prototype - getId  

最后兩種方法是調用原型方法的正確方法嗎?

如何從子對象q調用父級構造函數和原型方法?

所以,我怎么得到

來自q對象的'B prototype-getId'

因為qB的實例。 B構造函數直接在實例上分配getId方法,這就是您所獲得的方法。 如果您期望在B.prototype上使用一個,則需要刪除(或不分配)該實例上的一個:

// delete getId on instance
delete q.getId; 

// Now get inherited getId
q.getId()  // B prototype - getId

請注意, delete運算符僅對自己的屬性起作用,而不會刪除[[Prototype]]鏈上的屬性。

最后兩種方法是正確的方法嗎

  1. 使用p調用父母原型方法使用
  2. q

“正確”的意思是它們可以工作,盡管我不會設計這種方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM