我不知道我是否正確。訪問器描述符:如何在實踐中使用'get'和'set'?
這個例子是直接從MDN(Mozilla開發者網絡):
var bValue;
Object.defineProperty(o, "b", {get : function(){ return bValue; },
set : function(newValue){ bValue = newValue; },
enumerable : true,
configurable : true});
會發生什麼事 - 它創建了一個名爲bValue一個全局變量,它沒有這樣做。我知道這個例子只是演示了這個用法,因此它可以創建一個全局變量。但是,如果我要在應用程序中使用此,我將修改它咯,通過添加this
關鍵字:
Object.defineProperty(o, "b", {get : function(){ return this.bValue; },
set : function(newValue){ this.bValue = newValue; },
enumerable : true,
configurable : true});
現在,對象o
會有財產b
,並在同一時間,它也將有另一個屬性bValue
。雖然用戶(程序員)仍然可以直接訪問bValue,但只會暴露給'b'而不暴露給'bValue' - 我不明白如何防止它。
據我所知,財產b
和財產bValue
可能並不總是相同的,但b
將取決於bValue
的價值,因爲getter和setter允許我們的值賦給b
前預處理bValue。
主要問題是,我是否正確?或者我在這裏錯過了什麼?
啊...... gotchha ...非常感謝。它也很快。再次感謝。 – Golmaal 2012-01-03 13:57:35
+1:很好的答案。我只是想知道是否閉包是這樣做的唯一方式 - 似乎是John Resig在[Object.defineProperty()方法的示例中使用的東西](http://ejohn.org/blog/ecmascript- 5-對象和 - 屬性/)。 – 2012-02-22 14:30:13
@克里斯弗朗西斯:你能詳細說一下嗎?私有變量幾乎與JavaScript中的閉包同義。 – pimvdb 2012-02-22 15:20:00