2013-03-19 44 views
0

以下對象基於Nicholas Zakas的「面向對象編程原理」中的示例構建。然而,我不能在語法上弄錯錯誤。當我嘗試加載到瀏覽器中時,在控制檯中出現錯誤:「ReferenceError:owner_idx未定義」自定義JS對象不能正確解析

任何人都有關於如何修復的想法?

function Editor() { 
    Object.defineProperty(this, "program_idx", { 
     get: function() { 
      return program_idx; 
     }, 
     set: function(newVal) { 
      program_idx = newVal; 
     }, 
     enumerable: true, 
     configurable: true 
    }); 

    Object.defineProperty(this, "owner_idx", { 
     get: function() { 
      return owner_idx; 
     }, 
     set: function(newVal) { 
      owner_idx = newVal; 
     }, 
     enumerable: true, 
     configurable: true 
    }); 
}; 
+1

你意識到你正在分配到全球範圍,對吧? – Shmiddty 2013-03-19 22:49:06

+0

我錯過了存儲變量拖欠全球的情況。 – RSAdmin 2013-03-20 15:40:52

回答

2

那麼,「owner_idx沒有定義」。你爲什麼不定義它?

function Editor() { 

    var program_idx, owner_idx; 

    Object.defineProperty(this, "program_idx", { 
     get: function() { 
      return program_idx; 
     }, 
     set: function(newVal) { 
      program_idx = newVal; 
     }, 
     enumerable: true, 
     configurable: true 
    }); 

    Object.defineProperty(this, "owner_idx", { 
     get: function() { 
      return owner_idx; 
     }, 
     set: function(newVal) { 
      owner_idx = newVal; 
     }, 
     enumerable: true, 
     configurable: true 
    }); 
}; 

var e = new Editor(); 
e.owner_idx = "foo"; 
console.log(e.owner_idx); 

無論其你不需要存取方法,如果你唯一的目的是獲取/設置屬性值(無存儲/檢索之前,把他們,或使他們的價值的變化影響其他屬性)。常規屬性可以正常工作。

+0

那麼,program_idx也沒有定義,沒有提出錯誤。我認爲我的模型中存在一些細微的合成誤差。 JSLint根本沒有任何投訴。奇怪。謝謝! – RSAdmin 2013-03-20 15:24:34