我试图理解 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”。据我了解,将 B
的原型(prototype)设置为 A
的 JS 原型(prototype)继承意味着 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
的构造函数和方法。
编辑:
阅读评论后,我相信一个更好的问题是问如何用 A
的构造函数覆盖 B
的构造函数?
最佳答案
下面是一个构造函数。它在您调用新 A 时运行。
var A = function(v){
this.v = v || 'foo';
}
在B构造函数中是function(){};所以你没有设置 this.v
要获得您正在尝试的结果,您应该遵循以下模式:
var A = function(v){
this.v = v || 'foo';
}
A.prototype.shout = function(){ alert(this.v); }
var B = function(v){
B.prototype.constructor.call(this,v); // here you call A constructor
};
B.prototype = new A;
var test = new B('bar')
test.shout() // returns 'bar
关于javascript - 构造函数继承;我没有得到什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1271508/