Tôi có một câu hỏi liên quan đến cách con trỏ "this" được xử lý trong một kịch bản hàm lồng nhau.
Giả sử tôi chèn mã mẫu sau đây vào một trang web. Tôi gặp lỗi khi gọi hàm lồng nhau "doSomeEffects ()". Tôi đã kiểm tra trong Firebug và nó chỉ ra rằng khi tôi ở trong hàm lồng nhau đó, con trỏ "this" thực sự đang trỏ đến đối tượng "cửa sổ" chung - điều mà tôi không mong đợi. Chắc hẳn tôi đang không hiểu điều gì đó một cách chính xác bởi vì tôi nghĩ rằng kể từ khi tôi khai báo hàm lồng nhau trong một hàm của đối tượng, nó phải có phạm vi "cục bộ" liên quan đến hàm (nghĩa là con trỏ "this" sẽ tham chiếu đến chính đối tượng như nó như thế nào trong câu lệnh "if" đầu tiên của tôi).
Bất kỳ con trỏ nào (không có ý định chơi chữ) sẽ được đánh giá cao.
var std_obj = {
options : { rows: 0, cols: 0 },
activeEffect : "none",
displayMe : function() {
// the 'this' pointer is referring to the std_obj
if (this.activeEffect=="fade") { }
var doSomeEffects = function() {
// the 'this' pointer is referring to the window obj, why?
if (this.activeEffect=="fade") { }
}
doSomeEffects();
}
};
std_obj.displayMe();
this
tham chiếu đến đối tượng mà hàm được gọi.
var self = this;
và sau đó tham chiếu đến self
trong hàm bên trong thông qua bao đóng.
doSomeEffects
không liên quan cụ thể với bất kỳ đối tượng nào, vì vậy this
được giả định là cửa sổ, mẹ của tất cả các yếu tố.