![](/img/trans.png)
[英]method preventExtensions javascript and defineProperty
[英]Javascript defineProperty
使用時:
Object.defineProperty(obj,prop,desc){
get: function(){...
set: function(){...
}
無論指定什么屬性,getter / setter都適用於obj[prop]
還是作用於obj
?
我問是因為我試圖基於嵌套對象設置一些數據綁定,例如:
obj[propA] = {propB:'seomthing',propC:'somethingElse'}
當我做這樣的事情:
var obj = {value:{propA:'testA',propB:'testB'}}; Object.defineProperty(obj.value,'propA',{ get: function(){return this.value;}, set: function(newValue){this.value=newValue;console.log('propA: ',newValue);} }); console.log(obj.value.propA); obj.value.propA = 'testA'; Object.defineProperty(obj.value,'propB',{ get: function(){return this.value;}, set: function(newValue){this.value=newValue;console.log('propB: ',newValue);} }); console.log(obj.value.propB); obj.value.propB = 'testB'; console.log('propA: ',obj.value.propA,' --propB: ',obj.value.propB);
getter將值分配給對象中defineProperty
設置的所有屬性。
如果這是正確的功能,是否有辦法讓吸氣劑/設定劑僅在定義的屬性上起作用,以便在上面的小提琴中,propA將產生testA而propB將產生testB?
getter和setter方法僅適用於命名屬性,但是每個屬性中的this
屬性都引用其屬性的對象(您不必為每個屬性都具有后備變量)。
在您的示例中,您始終在讀取和修改obj.value.value
。 通過將每個變量包裝在IIFE中,可以為每個變量創建一個不同的變量,例如:
(function () {
var value;
Object.defineProperty(obj.value, 'propA', {
get: function () { return value; },
set: function (newValue) { value = newValue; },
});
})();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.