如何从Child类中的重写方法调用父方法

时间:2014-03-31 22:11:22

标签: javascript class inheritance methods override

如何从子类中重写的父类访问方法? 在下面的示例中,我想在覆盖内部调用bar.my_name()方法 foo.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();

2 个答案:

答案 0 :(得分:1)

可能的解决方案之一是将方法移动到基类原型。

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();

答案 1 :(得分:1)

你可以这样做:

(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);
};

但我不确定你要做什么或为什么,所以有了更多的背景,你会更容易给你更好的建议。