在对象原型中定义继承

时间:2015-07-19 13:55:02

标签: javascript inheritance

我正在从父类继承的javascript中实现函数。它与这种代码风格完美配合。

main.min.js

这没关系。但是我在Bar中有很多属性,我不想每次都重复Bar.prototype.someProp所以我使用的是速记版本而且它不是继承。

function Foo(){}

Foo.prototype = {
    constructor: Foo,
    name: 'foo',
    tostring: function()
    {
        return this.name;
    }
};

function Bar(){}

Bar.prototype = new Foo();
Bar.prototype.name = 'bar';

var b = new Bar();
console.log(b.tostring());    // says 'bar'

我假设Bar.prototype被Javascript的原生Object覆盖。如何使用速记function Bar(){} Bar.prototype = new Foo(); Bar.prototype = { constructor: Bar, name: 'bar' }; console.log(b.tostring()); // doesn't work since the method doesn't exist 继承并避免重复?

1 个答案:

答案 0 :(得分:2)

如果你使用......

Bar.prototype = {
  constructor: Bar,
  name: 'bar'
};

...你正在覆盖Bar原型中的所有内容,将其替换为新对象。尝试单独设置Bar.prototype.constructor = xxxBar.prototype.name = 'bar'

你可以定义一个辅助函数来减少重复,但如果你只需要一次就可能不值得:

function extend_with(obj, kv) {
    for (var k in kv) {
        obj[k] = kv[k];
    }
}

extend_with(Bar.prototype, {
    constructor: Bar,
    name: 'bar'
});