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

Что такое Overlay? – Nemoy

ответ

0

Ну, во-первых, это Overlay должен быть myObj? Предположим, что ваш код закончится бесконечным циклом, потому что this[propertyName] = aVal; в вашем сеттере собирается бесконечно называть сеттер для себя. Вам нужно будет сохранить это значение каким-либо другим способом. Здесь я сохранил его до _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 приходит, так что я сделал эти исправления для примера, а).