簡體   English   中英

如何從子類的重寫方法中調用父方法

[英]How to call Parent Method from the Overriding Method in Child class

如何從子類中被重寫的父類訪問方法? 在下面的示例中,我想在foo.my_name()的重寫方法內調用bar.my_name()方法。

function bar() {
  this.my_name = function() {
    alert("I Am Bar");
  }
}

function foo() {
  this.my_name = function() {
    alert("I Am Foo");
    //access parent.my_name()
  }
}

foo.prototype = Object.create(bar.prototype);
foo.prototype.constructor = foo;

var test = new foo();
test.my_name();

一種可能的解決方案是將方法移至基類原型。

function bar() {
}

bar.prototype.my_name = function() {
  alert("I am bar");
}

function foo() {
}

foo.prototype = Object.create(bar.prototype);
foo.prototype.my_name = function() {
    alert("I Am Foo");
    bar.prototype.my_name.call(this);
}

foo.prototype.constructor = foo;

var test = new foo();
test.my_name();

您可以這樣做:

(new bar()).my_name.call(this);

我認為您對原型的工作方式有些困惑,因為它們並沒有真正幫助您。

這可能會稍微好一點:

var bar = {
    my_name: function () {
        console.log('bar name');
    }
};

var foo = Object.create(bar);

foo.my_name = function () {
    console.log('foo name');
    bar.my_name.call(this);
};

或者,如果您想使用構造函數,則如下所示:

function Bar () {}

Bar.prototype.my_name = function () {
    console.log('bar name');
};

var foo = Object.create(Bar.prototype);

foo.my_name = function () {
    console.log('foo name');
    bar.my_name.call(this);
};

但是我不確定自己要做什么或為什么做,所以有了更多背景信息,可以為您提供更好的建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM