从子对象调用父构造函数和原型

时间:2014-11-13 20:06:18

标签: javascript

我试图理解在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中调用父构造函数和原型方法?

1 个答案:

答案 0 :(得分:1)

  

那么,我怎么才能得到

     

来自q对象的'B原型 - getId'

因为 q B 的实例。 B 构造函数直接在实例上分配 getId 方法,这就是你得到的方法。如果您期望 B.prototype 上的那个,那么您需要删除(或不分配)实例上的那个:

// delete getId on instance
delete q.getId; 

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

请注意, delete 运算符仅适用于自己的属性,不会删除[[Prototype]]链上的属性。

  

最后两种方式是否正确

     
      
  1. 使用使用p Parents构造函数方法调用父类原型方法   
  2. q
  3.   

“正确”,因为他们工作,但我不会设计它以这种方式工作。