我已經搜索了很多關於如何在Javascript中使用屬性的方法。我見過的大多數揭示模塊模式都具有專門公開的功能,並且根據經驗我知道如果我暴露一個對象,我只是真的在那裏獲得一個值的副本,然後我就可以擁有一個函數getMyThing()和setMyThing並公開。不過我想揭露不動產使用Html5獲取器和設置器實現具有揭示模塊模式屬性所需的清晰度
我見過的舊校園defineGetter這我回避和新Object.defineProperty(我有一些真正的麻煩與。(我可以輕鬆地使用它對抗artitary對象,但不是這裏面我的「模塊」,也不是我的模塊裏面,我想透露一個屬性。
var myobj = (function() {
var name = "default name"
var sayName = function() { return "hello " + name }
return {
badname : name, //this won't change
sayName : sayName,
get name() { return name;},
set name(value) { name = value ;}
}
})()
alert("should be default because its just a copy: " + myobj.badname)
alert("should be default: " + myobj.name)
myobj.name = "karl"
alert("should be default because its just a copy: " + myobj.badname)
alert("should be karl: " + myobj.name)
無論如何,我看到,你可以使用get和set關鍵字的幾個地方,我有以下的例子是至少在Firefox和IE10中工作。
我的問題:是否這是一種可以接受的方法,或者是我不知道的隱藏的陷阱。這是現代瀏覽器最爲接受的方法嗎? 這個功能叫什麼?以及Object.defineProperty功能的官方名稱是什麼? 我假設get和set關鍵字的使用是ECMAScript5 getters和setters,但是另一個叫做什麼?
並且是在兼容性圖表http://kangax.github.io/es5-compat-table/中的屬性初始值設定項中的「Getter」和「屬性初始值設定項中的Setter」類別中提到的get和set關鍵字?
例如上的jsfiddle - http://jsfiddle.net/klumsy/NagbE/1/
這個問題,因爲它代表是有點不清楚 - 你可能需要將其收緊(問題說「這是好的嗎?」通常會關閉) – slifty 2013-04-26 00:45:57
可能的重複[是否有像C#那樣的獲取/設置關鍵字?](http://stackoverflow.com/questions/5409372/does-javascript-have-get-set-keywords -like-c) – 2015-11-08 22:21:59