Mọi người đều nhận thức được this
trong javascript, nhưng cũng có trường hợp của self
gặp trong tự nhiên, chẳng hạn như herekhác biệt giữa điều này và tự trong JavaScript
Vì vậy, sự khác biệt giữa this
và self
trong JavaScript là gì?
Mọi người đều nhận thức được this
trong javascript, nhưng cũng có trường hợp của self
gặp trong tự nhiên, chẳng hạn như herekhác biệt giữa điều này và tự trong JavaScript
Vì vậy, sự khác biệt giữa this
và self
trong JavaScript là gì?
Trừ khi thiết lập ở những nơi khác, giá trị của self
là window
vì Javascript cho phép bạn truy cập vào bất cứ tài sản x
của window
một cách đơn giản x
, thay vì window.x
. Do đó, self
thực sự là window.self
, khác với this
.
window.self === window; // true
Nếu bạn đang sử dụng một chức năng được thực hiện trong phạm vi toàn cầu và không có trong chế độ nghiêm ngặt, this
mặc định là window
, và do đó
function foo() {
console.log(
window.self === window, // is self window?
window.self === this, // is self this?
this === window // is this window?
);
}
foo(); // true true true
Nếu bạn đang sử dụng một hàm trong một ngữ cảnh khác, this
sẽ đề cập đến ngữ cảnh đó, nhưng self
vẫn sẽ là window
.
// invoke foo with context {}
foo.call({}); // true false false
Bạn có thể tìm thấy window.self
được xác định trong W3C 2006 working draft for the Window Objecthere.
Để hoàn thành, '' self'' hữu ích trong ngữ cảnh của WebWorker khi cửa sổ không truy cập được (https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/ Using_web_workers). Sử dụng '' self'' thay vì '' window'' cho phép bạn truy cập đối tượng toàn cầu theo cách di động. – lqc
Mặc dù tôi trễ ở đây nhưng tôi đã xem qua một ví dụ mà cũng có thể hữu ích để hiểu this
thêm:
var myObject = {
foo: "bar",
func: function() {
var self = this;
console.log("outer func: this.foo = " + this.foo);
console.log("outer func: self.foo = " + self.foo);
(function() {
console.log("inner func: this.foo = " + this.foo);
console.log("inner func: self.foo = " + self.foo);
}());
}
};
myObject.func();
O/P
outer func: this.foo = bar
outer func: self.foo = bar
inner func: this.foo = undefined
inner func: self.foo = bar
Trước ECMA 5 ,
this
trong hàm bên trong sẽ tham chiếu đến đối tượng cửa sổ chung; trong khi đó, như ECMA 5,this
trong hàm bên trong sẽ không được xác định.
[Và về vấn đề này] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this) ... –
@dystroy: Có một: [ ' window.self'] (https://developer.mozilla.org/en-US/docs/Web/API/window.self) ('=== cửa sổ'). Mặc dù OP có thể có nghĩa là một tên biến tầm thường… – Bergi
Ồ, cái này bạn nghĩ sao? Vâng ... có lẽ bạn nên trả lời sau đó. –