Javascript 如何重构对象属性的更新?

Javascript 如何重构对象属性的更新?,javascript,oop,Javascript,Oop,我有一个JavaScript对象,这些属性大部分是静态的。它们可以在施工时确定。但是,我还添加了一个方法“morph”,用于更改对象的状态。因此,这些属性应该随之改变 我在下面成功地将其编码为方法(longNameMethod,无问题)和属性(longNameProperty,有问题)。longNameProperty的问题在于构造函数和morph方法中的代码看起来非常相似。有没有办法消除这种重复 var Fruit = function (name) { this.name = nam

我有一个JavaScript对象,这些属性大部分是静态的。它们可以在施工时确定。但是,我还添加了一个方法“morph”,用于更改对象的状态。因此,这些属性应该随之改变

我在下面成功地将其编码为方法(longNameMethod,无问题)和属性(longNameProperty,有问题)。longNameProperty的问题在于构造函数和morph方法中的代码看起来非常相似。有没有办法消除这种重复

var Fruit = function (name) {
    this.name = name;

    this.longNameMethod = function () {
        return this.name + this.name;
    }

    this.longNameProperty = this.name + this.name;

    this.morph = function(name) {
        this.name = name;

        // starting to feel redundant
        this.longNameProperty = this.name + this.name;
    }

    // update(); // hypothetical solution
};

var item = new Fruit('apple');

console.log(item.longNameMethod()); // apple apple
console.log(item.longNameProperty); // apple apple

item.morph('orange');

console.log(item.longNameMethod()); // orange orange
console.log(item.longNameProperty); // orange orange
我尝试包含一个“update”方法来处理所有这些属性的更新,但由于某些原因,我无法在构建过程中使用它。它表示this.name未定义。施工期间的操作顺序如何

编辑:是的,方法方法和属性方法在功能上与外部方法相同,但目标是使用属性方法


编辑^2:所以我认为有多个问题在起作用。。。这里解释了其中一种方法:

当您将该方法分配到
中时,您需要在使用它之前添加该方法:

var Fruit = function (name) {
    this.morph = function(name) {
        this.name = name;

        this.longNameProperty = this.name + this.name;
    }

    this.morph(name);
};

var item = new Fruit('apple');

console.log(item.longNameProperty); // apple apple

item.morph('orange');

console.log(item.longNameProperty); // orange orange

是的,我在想-单例的解决方案不会直接映射到我面前的代码,虽然按照你的建议实现了,但它是有效的。如果状态更新部分和变形方法是两种不同的方法,为什么必须将参数传递到状态更新方法中?我可能必须重新表述这个问题。。。有很多事情我真的不明白=(事实证明我的实现差异在这里得到了解决: