我試圖在程序getter/setter方法添加到JavaScript中的對象,雖然我覺得下面的代碼應該簡單的工作,如我所料不採取行動。如何程序設置Javascript getter/setters? (或實際關閉範圍)
這裏是我的代碼:
var data = {a:1, b:2, c:3};
function Abc(data) {
var data = data || {};
for (var key in data) {
console.log(key, data[key]);
this.__defineGetter__(key, function() {
console.log('using getter');
return data[key];
})
}
return this;
}
abc = Abc(data);
console.log('this should be 1', abc.a);
console.log('this should be 2', abc.b);
console.log('this should be 3', abc.c);
,這是我意想不到的輸出
a 1
b 2
c 3
using getter
this should be 1 3
using getter
this should be 2 3
using getter
this should be 3 3
輸出使得完全沒有意義的我,但我得到在Chrome和Webkit相同的輸出,所以我猜我只是愚蠢的,這不是一個Javascript引擎的錯誤:)
作爲公司米特斯提到我對「數據」的三重使用並不是很好!
做;'? – sje397
嘗試在'console.log'中放入更多診斷以包含密鑰。關閉只有一個我認爲的關鍵。 –
對於初學者來說,當你有三個不同的範圍變量時,你會混淆自己,所有的變量名都是'data'。我首先給出所有這三個(全局'data',函數參數'data'和局部變量'data')的不同名稱。您在該功能中阻止訪問其中的兩個,因此您可能無法獲得您期望的內容。 – jfriend00