У меня есть объект 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: Так что я думаю, что есть несколько проблем в игре ... Одна из которых объясняется здесь: Как работает ключевое слово "this" в функции?