[英]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.