2013-06-20 102 views
0

我期待看到:
設置自動創建屬性不起作用

獲取

可有人請向我解釋爲什麼這個代碼不工作?感謝

var myObj = new MyObj(); 
function CreateSimpleProperty(propertyName) { 
    Object.defineProperty(myObj, propertyName, { 
     set: function (aVal) { 
      this[propertyName] = aVal; 
      console.log("Setting"); 
     }, 
     get: function() { 
      console.log("Getting"); 
      return this[propertyName]; 
     } 
    }); 
} 

CreateSimpleProperty("TEST"); 
Overlay.TEST = 15; 
console.log(Overlay.TEST); 
+0

什麼是疊加? – Nemoy

回答

0

嗯,首先,是Overlay應該是myObj?假設是這樣的,你的代碼會以無限循環結束,因爲你的setter中的this[propertyName] = aVal;會無限地調用setter。您需要以其他方式存儲該值。在這裏,我已將它保存到_TEST,如下所示。

下面的代碼和工作的jsfiddle:http://jsfiddle.net/rgthree/3s9Kp/

var myObj = {}; 
function CreateSimpleProperty(propertyName) { 
    Object.defineProperty(myObj, propertyName, { 
     set: function (aVal) { 
      this['_'+propertyName] = aVal; 
      console.log("Setting"); 
     }, 
     get: function() { 
      console.log("Getting"); 
      return this['_'+propertyName]; 
     } 
    }); 
} 

CreateSimpleProperty("TEST"); 
myObj.TEST = 15; 
console.log(myObj.TEST); 

(顯然,我不知道你的MyObj是什麼或者Overlay來源,所以我做了例如那些修復以及)。