我正在从父类继承的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
继承并避免重复?
答案 0 :(得分:2)
如果你使用......
Bar.prototype = {
constructor: Bar,
name: 'bar'
};
...你正在覆盖Bar
原型中的所有内容,将其替换为新对象。尝试单独设置Bar.prototype.constructor = xxx
和Bar.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'
});