Javascript object.defineProperties 以自动更新属性
Javascript Object.defineProperties to Update Properties Automatically
在Javascript中,每当我手动更新旋转设置时,我都会尝试使用它.....例如 rotation.rotationSetting = 7,速度.步数# 将由对象自动更新。
现在,我收到一个错误"未捕获的类型错误:在非对象上调用的Object.defineProperties",因为rotationSet不是对象。我如何解决这个问题并实现我想要的?
var rotation = function() {
var rotationId;
var rotationList = [];
var rotationSetting = 3;
var speed = {
step1 : 0,
step2 : 0,
step3 : 0,
step4 : 0,
}
Object.defineProperties(rotationSetting, {
set: function(rotationSetting, speed) {
this.step1 = rotationSetting * 1000;
this.step2 = this.step1 + 1000;
this.step3 = this.step2 + this.step1;
this.step4 = this.step3 + 1000;
}
})
return {
rotationId : rotationId,
rotationList : rotationList,
rotationSetting : rotationSetting,
speed : speed,
}
}();
rotationSetting
不是属性,而是本地范围的变量。 因此,您不能在其上使用Object.defineProperty
。
正确的用法是:
Object.defineProperty(obj, 'rotationSetting', {
set: ...
});
其中obj
是要返回给调用方的对象。
请注意,如果您在不删除var rotationSetting
的情况下执行此操作,您将有两个rotationSetting
变量 - 您已经声明的变量和this.rotationSetting
。
方法签名是这样的:Object.defineProperties( object, propertyName, { /* definition */ });
不要将值保存在变量中,直接将它们保存在返回的对象上。
您需要更加注意如何使用Object.defineProperty
。第一个参数是定义属性的对象,第二个参数是属性名称。
var rotation = function() {
var rotationId;
var rotationList = [];
var speed = {
step1 : 0,
step2 : 0,
step3 : 0,
step4 : 0
} ;
var result = {
rotationId : rotationId,
rotationList : rotationList,
speed : speed
}
Object.defineProperty(result, 'rotationSetting',{
set: function(val) {
speed.step1 = val * 1000;
speed.step2 = speed.step1 + 1000;
speed.step3 = speed.step2 + speed.step1;
speed.step4 = speed.step3 + 1000;
}
});
return result;
}();
console.log(rotation.speed.step1);
rotation.rotationSetting = 7;
console.log(rotation.speed.step1);
编辑:更新了示例以更好地适应您的用法。
相关文章:
- Css order属性不't在Jquery设置时更新
- 更新属性工作不正常Meteor/MongoDB
- 阵列中的localstorage更新属性
- 数组中嵌入文档的集合更新属性
- Javascript object.defineProperties 以自动更新属性
- 使用 ajax 调用轨道更新属性
- X3DOM 更新属性
- React未从数组内的对象更新属性
- 如何使用 Ember 更新属性后滚动到 DOWN
- 如果JavaScript对象是通过引用传递的,为什么不;t更新属性值更新局部变量
- 余烬模板不更新属性变量的变化
- 如何使用jQuery更新属性?
- 更新属性指令值
- Jquery /js:脚本在输入值改变后不更新属性
- OrientDB通过JavaScript更新属性
- 猫鼬模式方法和“这个”更新属性 - NodeJS
- 不更新属性值的二传手函数
- Backbone.js正在更新属性被更改的模型
- 克隆和更新属性
- 如何在从子控制器更新属性后刷新应用程序模板