我一直在尝试各种方法来模拟 Javascript 中的经典继承,并且我已经找到了一些方法来做到这一点。然而,我很好奇为什么我不能以一种特定的方式做到这一点,以及如何尝试解决它。
我已经尝试过这个:
var squeaker = new squeek();
function monsterMaker(newMonster) {
newMonster.type = "monster";
newMonster.health = 10;
return newMonster;
}
function squeek() {
this.name = "squeek";
this = monsterMaker(this);
}
我想我明白为什么会发生这种情况,并且我已经找到了解决方法(即 jQuery 的 $.extend),但是有没有办法使用左侧赋值以这种方式更改新创建的对象,或者一个解决方法,不使用额外的库?
最佳答案
您不能分配给 this
,但您不需要:您的代码(如果有效)将等同于此代码(它确实有效):
var squeaker = new squeek();
function monsterMaker(newMonster) {
newMonster.type = "monster";
newMonster.health = 10;
return newMonster;
}
function squeek() {
this.name = "squeek";
monsterMaker(this); // sets properties on this
}
(虽然 JavaScript 是按值传递,但本例中的“值”是整个 this
对象,因此在某些方面它类似于按引用传递。)
关于Javascript - 在构造函数中使用左侧赋值更改对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12681323/