Luôn từ khóa này đề cập đến ngữ cảnh mà nó được gọi. Nhưng tự và cửa sổ ngay cả sau khi thay đổi ngữ cảnh đề cập đến cửa sổ chính nó.
// Log function
function logAll(){
console.log("this >", this);
console.log("self >", self);
console.log("window >", window);
console.log("window.self >", window.self);
console.log("this.self >", this.self);
};
// Class Car
function Car(){
this.self = 6;
};
// Instance of Car
var honda = new Car();
honda.self = 5;
// logAll() called in context Gloabal
logAll();
// Outputs
this > Window
self > Window
window > Window
window.self > Window
this.self > Window
// logAll() called in context honda
logAll.call(honda);
// Outputs
this > Car { self= 5 }
self > Window
window > Window
window.self > Window
this.self > 5
đây bạn có thể nhìn thấy cửa sổ this.self lợi nhuận trong khi gọi trong phạm vi toàn cầu bởi vì trong phạm vi toàn cầu
this = windows
this.self = windows.self
this.self = Windows
Nhưng trong khi bạn đang ở trong bối cảnh của honda, một thể hiện của xe:
this = honda
this.self = honda.self
this.self = 5
Ngữ cảnh đóng một vai trò quan trọng trong Javascript, trong khi làm việc với OOP và thừa kế.
+1, nhưng chỉ để là pedantic, 'self' và' window' là cả hai tham chiếu đến đối tượng toàn cầu javascript - chứa hai thuộc tính 'self' và' window' (cả hai trỏ tới chính nó). Có nghĩa là không có "như thể" - 'cửa sổ' chỉ là một tài sản của' self' là 'self' là thuộc tính của' window'. Và để thêm một cái gì đó (hơi) ít pedantic: tất cả điều này (ngoại trừ 'this' ... ;-)) chỉ là một nhất định cho ECMA/Javascript trong một trình duyệt. Cả 'cửa sổ' lẫn' self' đều là các phần của ngôn ngữ, và có thể không có mặt trong các ứng dụng khác của ECMA/Javascript. – JimmiTh
Việc thêm vào bộ khung, trong IE, 'cửa sổ' là ... đặc biệt. Đối với tất cả các mục đích thực tế, 'window',' self' và 'window.self' (và' this' trong một số ngữ cảnh) vẫn tương đương, * nhưng * toán tử bình đẳng nghiêm ngặt nói đó là một đối tượng khác. Trong bối cảnh toàn cầu, tất cả các biểu thức này được đánh giá là đúng trong IE: 'window === this',' window! == self', 'window! == window.window' và' window! == window.self '. Toán tử '==' nói tất cả chúng đều bình đẳng. –