使用 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 所有