【发布时间】:2009-08-13 11:51:39
【问题描述】:
我正在尝试理解 Javascript 中的继承,但是这段代码(在 Firebug 中测试)没有按我预期的方式工作。我有什么不明白的?
var A = function(v){
this.v = v || 'foo';
}
A.prototype.shout = function(){ alert(this.v); }
var B = function(){};
B.prototype = new A;
var test = new B('bar')
test.shout() // returns 'foo'
我期望的是,当我分配 test 时,属性 this.v 设置为“bar”。据我了解,JS 原型继承设置B 的原型为A 意味着B 中的所有内容都被覆盖。我希望它的构造函数被覆盖,并且调用new B('bar') 将使用参数“bar”执行A 的构造函数。
如果我的理解不正确,请有人纠正我。找到我想要做的事情的解决方案也很好:
// constructors from above
B.prototype.yell = function(){ alert('hello world'); }
var test1 = new B('bar'), test2 = new B('spam'), test3 = new B('eggs');
...所以我正在创建的 JS 对象遵循与标准 OOP 类似的继承模式,因此 B 将继承 A 的构造函数和方法。
编辑:
阅读完 cmets 后,我相信一个更好的问题是问如何用 A 的构造函数覆盖 B 的构造函数?
【问题讨论】:
-
什么不符合您的预期?你在期待什么?
标签: javascript oop inheritance