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