使用 setter 和 getter 查找更改属性的内容
假设你有一个这样的对象:
var myObject = {
name: 'Peter'
}
稍后在你的代码中,你尝试访问 myObject.name
,而你将获得 George 而不是 Peter 。你开始想知道是谁更改了它以及确切地改变了它。有一种方法可以在每一组上放置一个 debugger
(或其他东西)(每次有人做 myObject.name = 'something'
):
var myObject = {
_name: 'Peter',
set name(name){debugger;this._name=name},
get name(){return this._name}
}
请注意,我们将 name
重命名为 _name
,我们将为 name
定义一个 setter 和一个 getter。
set name
是 setter。这是一个甜蜜的地方,你可以放置 debugger
,console.trace()
,或任何你需要调试的东西。setter 将在 _name
中设置 name 的值。getter(get name
部分)将从那里读取值。现在我们有一个具有调试功能的全功能对象。
但是,大多数情况下,改变的对象不在我们的控制之下。幸运的是,我们可以在现有对象上定义 setter 和 getter 来调试它们。
// First, save the name to _name, because we are going to use name for setter/getter
otherObject._name = otherObject.name;
// Create setter and getter
Object.defineProperty(otherObject, "name", {
set: function(name) {debugger;this._name = name},
get: function() {return this._name}
});
查看 MDN 的 setter 和 getter 以获取更多信息。
浏览器支持 setter / getters:
Chrome | Firefox | IE | Opera | 苹果浏览器 | 移动 | |
---|---|---|---|---|---|---|
版本 | 1 | 2.0 | 9 | 9.5 | 3 | 所有 |