【发布时间】:2017-09-19 04:56:14
【问题描述】:
我有一个在对象或数组上设置 getter 和 setter 的函数。 我的问题是,如果设置值是一个对象,我无法检测到它的内部变化,但只有在假设它是通过 getter 访问它的情况下才能检测到它。目前 getter 返回对象但是我想在返回 getter 后执行一个操作,无论它是否被更改。
我现在的代码:
set = function(obj, i, val) {
Object.defineProperty(obj, i, {
set(newVal) {
val = newVal
// react to changes
insert(val, i)
},
get() {
return val
//I want this to run after the object was accessed and possibly changed
if (typeof val == "object") {
insert(val, i)
}
},
configurable: true,
enumerable: true
})
}
我想到了一种解决方案,即 setTimeout,但是如果删除了 setter 和 getter,setTimeout 可能会导致不需要的行为,我宁愿代码保持同步。
我考虑的另一个想法是在所有对象属性上定义 setter 和 getter,但这会很昂贵。
我该如何解决这个问题?
【问题讨论】:
-
“但是如果 setter 和 getter 被删除,setTimeout 可能会导致不需要的行为” 嗯?
-
您可以冻结对象或使用 Immutablejs 之类的库,以便更新对象的唯一方法是重新设置。
-
这听起来像是 X/Y 问题。您要解决的根本问题是什么?
-
如果使用 delete 关键字重新定义或删除它们,那么 setTimeouts 函数仍然会触发并可以访问该对象
-
我正在尝试在没有 angularjs 的情况下重新创建 Ng-repeat
标签: javascript return getter-setter