Bên trong hàm ẩn danh this
là đối tượng chung.
Bên trong của test
, đây là trường hợp của MyObject
mà trên đó phương thức được gọi.
Bất cứ khi nào bạn gọi một chức năng như thế này:
somceFunction(); // called function invocation
this
là luôn đối tượng toàn cầu, hoặc undefined
trong chế độ nghiêm ngặt (trừ khi someFunction
đã được tạo ra với bind
** - xem dưới đây)
Bất cứ khi nào bạn gọi một chức năng như thế này
foo.someMethod(); //called method invocation
this
được thiết lập để foo
** ECMAScript5 định nghĩa một hàm bind
cho phép bạn tạo một hàm mà có một thiết lập trước giá trị cho this
Vì vậy
này
var obj = { a: 12 };
var someFunction = (function() { alert(this.a); }).bind(obj);
someFunction();
Nguyên nhân someFucntion
được gọi với this
bằng obj
, và cảnh báo 12. Tôi mang cái này lên chỉ cần lưu ý rằng đây là một ngoại lệ tiềm năng để các quy tắc tôi đã đề cập về chức năng gọi là
someFunction();
luôn có this
bằng đối tượng chung (hoặc undefined
ở chế độ nghiêm ngặt)
Nguồn
2011-12-29 17:09:18
Chào mừng bạn đến với phạm vi chức năng trong JavaScript. – zzzzBov
@zzzzBov: Đó không phải là đóng cửa. – SLaks
Bạn có thể muốn sử dụng một cặp parens bổ sung để cải thiện khả năng đọc: '(new MyObject()) .test()' –