JavaScript 使用设置器和获取器查找更改属性的内容

示例

假设您有一个像这样的对象:

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并将为定义一个setter和一个getter name。

set name是二传手。这是一个甜蜜点,你可以放置debugger,或者其他任何你需要进行调试。设置器将在中设置name的值。吸气剂(零件)将从那里读取值。现在,我们有了具有调试功能的功能齐全的对象。console.trace()_nameget name

但是,大多数情况下,更改的对象不在我们的控制之下。幸运的是,我们可以在现有对象上定义setter和getter来调试它们。

// 首先,将名称保存为_name,因为我们将使用name作为setter / getter
otherObject._name = otherObject.name;

// 创建setter和getter
Object.defineProperty(otherObject, "name", {
    set: function(name) {debugger;this._name = name},
    get: function() {return this._name}
});

在MDN上查看设置者和获取者,以获取更多信息。

浏览器对设置器/获取器的支持:


火狐浏览器IE浏览器歌剧苹果浏览器移动
12.099.53所有