Bên John Resig của "kỹ thuật Javascript Pro" ông mô tả một cách để tạo ra phương pháp đối tượng năng động với mã dưới đây:"này" bên trong một chức năng ẩn danh? Cuốn sách
// 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;
};
})();
}
}
Vấn đề là khi tôi cố gắng instantiating đối tượng trên, các phương pháp năng động đang được gắn vào đối tượng cửa sổ thay vì đối tượng được khởi tạo. Nó có vẻ như "này" là đề cập đến cửa sổ.
// 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());
Chạy mã trên sẽ ném lỗi này "user.getname không phải là hàm".
Cách chính xác để tạo các chức năng động cho từng đối tượng được khởi tạo là gì?
Tôi chắc chắn John Resig đã sử dụng thụt đầu dòng thích hợp. –
Điều này có vẻ không đúng. Bên trong hàm ẩn danh, 'this' là' window'. –
Câu trả lời là * không * thụt lề, nhưng nó ** là thụt đầu dòng **. Bàn luận. –