我试图理解在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中调用父构造函数和原型方法?
答案 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]]
链上的属性。
最后两种方式是否正确
- 使用使用p Parents构造函数方法调用父类原型方法
- q
醇>
“正确”,因为他们工作,但我不会设计它以这种方式工作。