gpt4 book ai didi

javascript - 构造函数继承;我没有得到什么?

转载 作者:行者123 更新时间:2023-11-29 22:42:58 24 4
gpt4 key购买 nike

我试图理解 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com