扩展原型函数JavaScript

时间:2015-07-18 18:40:03

标签: javascript inheritance prototype

我有一个继承自另一个对象的对象,如下所示:

b.prototype.foo = function ()
{
    baz();
    // When .foo() is called, runs both bar() and baz()
}

我希望有一个名为“foo”的b方法,并使用相同的名称扩展一个函数。

{{1}}

有没有一种简单的方法可以在没有库的帮助下在原生JavaScript中实现这一目标?

2 个答案:

答案 0 :(得分:3)

如果我理解正确,你可以扩展方法

function A() {}

A.prototype.foo = function() {
    console.log('foo');
};

function B() {}

B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;
B.prototype.foo = function() {
  A.prototype.foo.call(this);
  console.log('foo2');
}

var b = new B();

b.foo();

答案 1 :(得分:1)

最简单的选择:

b.prototype.foo = function () {
    bar();
    baz();
}

但如果您对a.prototype.foo进行了更改,则需要使用相同的逻辑更新b.prototype.foo

更好的选择是:

b.prototype.foo = function () {
    a.prototype.foo.call(this); 
    baz();
}

现在b.prototype.foo()调用a.prototype.foo(),然后调用自己的内部逻辑。如果您更改a.prototype.foo(),则这些更改会立即反映在b.prototype.foo()的行为中,而不需要更广泛的重构。