Tôi có một câu hỏi liên quan đến cách con trỏ "này" được xử lý trong một kịch bản hàm lồng nhau.Con trỏ "này" trong 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 tôi 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ự trỏ đến đối tượng "cửa sổ" toàn cục - mà tôi không mong đợi. Tôi không được hiểu một cái gì đó một cách chính xác bởi vì tôi nghĩ vì tôi đã khai báo hàm lồng nhau trong một hàm của đối tượng, nên có phạm vi "cục bộ" liên quan đến hàm (tức là con trỏ "này" sẽ đề cập đến chính đối tượng đó) 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();
Câu hỏi của bạn chính xác là gì? – Sarfraz
Khi được sử dụng bên trong một hàm, 'this' đề cập đến đối tượng mà hàm được gọi. – approxiblue
Những gì bạn có thể làm trong phạm vi bên ngoài là một cái gì đó như 'var self = this;' và sau đó tham chiếu đến 'self' trong hàm bên trong thông qua việc đóng. – Kai