如何从子方法中调用父方法?

时间:2013-11-26 10:47:32

标签: javascript oop prototypal-inheritance

我有这样的代码:

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是父母的实例。怎么可以在我的情况下调用父方法?或者我必须重构我的代码?

1 个答案:

答案 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

Example JSFiddle