【发布时间】:2017-10-21 13:01:41
【问题描述】:
这个问题是我在这里提出的另一个问题的延续:How to intercept and modify a specific property for any Object
这是一种用于拦截任何对象的某个名称的属性的方法,目的是在赋值或读取时更改值或执行某个操作:
Object.defineProperty(Object.prototype, "my_property", {
set: function (value) {
this._value = value;
},
get: function () {
return "changed";
}
});
var some_object = {};
some_object.my_property = "unchanged";
document.body.innerHTML += some_object.my_property;
My property value is:
虽然该方法适用于在对象创建后分配给属性或从属性中读取的值,例如:
var some_object = {}; // or new Object()
some_object.some_property = "some_value"; // triggers setter
console.log(some_object.some_property); // triggers getter
如果属性已使用字面表示法与对象一起初始化,则不会触发 getter 和 setter,如下所示:
var some_object = {some_property: "some_value"}; // does not trigger setter
console.log(some_object.some_property); // does not trigger getter
我如何调整以前的策略,使其也可以使用文字符号,或者是否有使用完全不同的方法来实现此目的的不同方法?也许通过文字符号拦截任何对象的创建,类似于猴子修补 Object.create() 函数?
请记住,这只是针对任何未知对象的已知名称属性。
【问题讨论】:
标签: javascript object monkeypatching