簡體   English   中英

如何重構 object 屬性的更新?

[英]How do I refactor the updating of object properties?

我有一個 JavaScript object 這些屬性主要是 static。 它們可以在施工時確定。 但是,我還添加了一個“變形”方法,可以更改對象的 state。 所以這些屬性應該隨之改變。

我在下面成功地將它編碼為方法(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

我嘗試包含一個“更新”方法來處理更新所有這些屬性,但由於某種原因,我無法在構建過程中使用它。 它說 this.name 是未定義的。 施工過程中的操作順序是怎么回事?

編輯:是的,方法方法和屬性方法在功能上與外部相同,但目標是使用屬性方法。

編輯^2:所以我認為有多個問題在起作用......其中一個在這里解釋: “this”關鍵字在 function 中如何工作?

您需要在使用它之前添加方法,當您將它分配給this時:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM