我有一个JavaScript对象,这些属性主要是静态的。它们可以在施工时确定。但是,我还添加了一个方法“变形”来改变对象的状态。所以这些属性应该随之改变。
我在下面成功编写了它,作为方法(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:所以我认为有多个问题在起作用......其中一个解释如下:How does "this" keyword work within a function?
答案 0 :(得分:1)
当您将方法分配到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