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

标签 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 是父级的实例。在我的情况下如何调用父方法?还是我必须重构我的代码?

最佳答案

您需要为 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

关于javascript - 如何从子方法中调用父方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20214909/

相关文章:

javascript - 仅使用 HTML 和 Javascript 进行开发?

javascript - 如果存在另一个 div(由 Wordpress 短代码创建),则将类添加到 div

php - 命名对象相同,但位于不同的命名空间中

java - 如何为简单的学校应用程序设计对象

javascript - 为什么我不能通过 Object.defineProperties() 在原型(prototype)上定义属性或函数?

javascript - 为什么对象中的属性是未定义的,尽管它存在于对象的 __proto__ 中?

javascript - 要保存和显示的 HTML div 文本

javascript - 以编程方式更改 Google 应用程序脚本的时区

oop - 方法去哪个类(class)?

JavaScript 使用原型(prototype)继承