使用 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。这是一个甜蜜的地方,你可以放置 debuggerconsole.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 的 settergetter 以获取更多信息。

浏览器支持 setter / getters:

Chrome Firefox IE Opera 苹果浏览器 移动
版本 1 2.0 9 9.5 3 所有