如何重构对象属性的更新
How do I refactor the updating of object properties?
我有一个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
我尝试包含一个"更新"方法来处理更新所有这些属性,但由于某种原因,我无法在构建过程中使用它。上面说这个名字没有定义。施工期间的操作顺序是什么?
编辑:是的,方法方法和属性方法在功能上与外部相同,但目标是使用属性方法。
编辑^2:所以我认为有多个问题在起作用。。。其中之一在这里解释:;这个";关键字在函数中工作?
当您将该方法分配到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
相关文章:
- 如何从对象的原型方法访问JavaScript对象属性
- 如何将数组项添加到对象属性中
- 设置嵌套对象属性的更好方法
- JavaScript管理具有重复属性名称的对象属性
- 如何使用element.myobj.prop等具有对象属性的元素
- 如何使用(this)访问Angular 2 http rxjs catch函数中的对象属性
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 如何在AngularJS工厂中正确声明对象属性
- 如何使用object.assign()从其他对象引用基本对象属性
- 使用XPath样式访问Javascript JSON对象属性
- 将javascript对象(属性+值)合并到一个对象中
- 数组:使对象属性成为数组键
- 无法从JavaScript中的函数调用对象属性
- Google Closure Advanced |无法识别对象属性|动态属性
- Javascript从匿名函数访问外部对象属性
- 从函数更改对象属性
- 如何从字符串变量访问对象属性
- 从嵌套对象属性中获取排除某个值的最高值
- 在Aurelia computeds中,当设置依赖关系时,如何声明对对象属性的依赖关系
- 传递数量不确定的可能嵌套的对象属性