Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 29th, 2012  |  syntax: None  |  size: 1.06 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Weird behavior with Javascript getter/setters
  2. var Record = function(data) {
  3.   this.fieldValues = {}
  4.   this._data = data;
  5.   var record = this;
  6.   for(var key in data) {
  7.     record.__defineGetter__(key, function() {
  8.       return record._data[key];
  9.     });
  10.     record.__defineSetter__(key, function(val) {
  11.       record.fieldValues[key] = val;
  12.     });
  13.   }
  14. }
  15.  
  16. var myRecord = new Record({prop1: 'prop1test', prop2: 'prop2test'});
  17.  
  18. myRecord.prop1 = 'newvalue';
  19.  
  20. console.log(myRecord.fieldValues.prop1); // undefined
  21. console.log(myRecord.fieldValues.prop2); // 'newvalue'
  22.        
  23. var Record = function(data) {
  24.     var key;
  25.     this.fieldValues = {}
  26.     this._data = data;
  27.     for(key in data) {
  28.         //closure maintains state of "key" variable
  29.         //without being overwritten each iteration
  30.         (function (record, key) {
  31.             record.__defineGetter__(key, function() {
  32.                 return record._data[key];
  33.             });
  34.             record.__defineSetter__(key, function(val) {
  35.                 record.fieldValues[key] = val;
  36.             });
  37.         }(this, key));
  38.     }
  39. }