簡體   English   中英

Javascript 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM