我有这样的代码:
function A() {
this.hello = function() {
console.log("I'm A");
}
}
function B() {
this.hello = function() {
// I need to call A.hello here, like parent.hello();
B.prototype.hello(); // This is wrong, TypeError
console.log("I'm B");
}
}
B.prototype = new A();
var b = new B();
b.hello();
#=> TypeError: Cannot call method 'hello' of undefined
我在这里阅读了一些类似的问题,但他们都使用这种技术,他们为prototype
指定了一个方法。
FaqPage.prototype.init = function(name, faq) {
BasePage.prototype.init.call(this, name);
this.faq = faq;
}
FaqPage.prototype.getFaq = function() {
return this.faq;
}
但这不是我的情况。我的prototype
是父母的实例。怎么可以在我的情况下调用父方法?或者我必须重构我的代码?
答案 0 :(得分:3)
您需要在创建要运行的函数时分配this.hello
一个值。
尝试以下方法:
function A() {
this.hello = function() {
console.log("I'm A");
}
}
function B() {
this.hello = function() {
B.prototype.hello(); // Now runs correctly and logs "I'm A"
console.log("I'm B");
}
}
B.prototype = new A();
var b = new B();
b.hello();
通过将代码更改为this.hello = function() { }
,我们创建了一个可以从对象外部调用的对象属性。
调用b.hello();
的结果是:
I'm A
I'm B