Javascript - 在构造函数中使用左侧赋值更改对象

标签 javascript inheritance extends

我一直在尝试各种方法来模拟 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/

相关文章:

java - 无法转换为 Java 中的扩展类

android - 如何将按钮添加到 "extends View"类?

java - 由于 Java 中的一个类不能扩展多个类。我怎么能做到这一点?

Java Lombok 库 : builder annotation issues with Inheritance

Ruby 类变量

c# - 为什么当存在不明确的虚拟方法时此 C# 代码编译正常?

Javascript 和 HTML 似乎无法正常工作

javascript - 如何在一个键/值对Javascript中添加多个相同的键对象数据?

javascript - 将表列从一行移动到另一行

javascript - 限制缩放谷歌地图