裏面約翰Resig的書「臨的JavaScript技術。」他描述生成與下面的代碼動態對象方法的一種方式:「這個」在一個匿名函數裏面?
// Create a new user object that accepts an object of properties
function User(properties) {
// Iterate through the properties of the object, and make sure
// that it's properly scoped (as discussed previously)
for (var i in properties) {
(function() {
// Create a new getter for the property
this["get" + i] = function() {
return properties[i];
};
// Create a new setter for the property
this["set" + i] = function(val) {
properties[i] = val;
};
})();
}
}
問題是,當我嘗試實例上述目的,動態方法正在連接到窗口對象而不是實例化的對象。看起來「這個」是指窗口。
// Create a new user object instance and pass in an object of
// properties to seed it with
var user = new User({
name: "Bob",
age: 44
});
alert(user.getname());
運行上面的代碼會引發此錯誤「user.getname不是函數」。
爲每個實例化對象生成動態函數的正確方法是什麼?
我相信約翰Resig的使用正確的縮進。 – 2012-03-04 02:58:18
這看起來不對。在匿名函數中,'this'是'window'。 – 2012-03-04 02:59:22
答案是* not * indentation,但是它是indentation **。討論。 – 2012-03-04 03:02:28