Chúng được lấy từ hướng dẫn Jquery vid tuts-premium.
http://tutsplus.com/lesson/the-this-keyword/ Jeff giải thích điều này 'đang đề cập đến mỗi lần nhưng tôi không chắc mình đã nắm được lý do đằng sau tất cả.4 kịch bản khác nhau của 'điều này'. Giải thích đúng là gì?
Ví dụ: 1
function doSomething(e) {
e.preventDefault();
console.log(this);
}
$('a').on('click', doSomething);
Trong trường hợp này "này đề cập đến 'a' yếu tố" (là trong trường hợp này đối tượng phụ huynh)
Tôi đoán đó là bởi vì đây báo cáo kết quả tương đương với:
$('a').on('click', function (e) {
e.preventDefault();
console.log(this);
}
Vì vậy 'a' là đối tượng gốc
Ví dụ: 2
var obj = {
doIt: function(e){
e.preventDefault();
console.log(this);
}
}
$('a').on('click', obj.doIt);
Trong trường hợp này "này vẫn đề cập đến 'a' yếu tố" (* nhưng dường như nó không phải là đối tượng cha?)
Có vẻ như lần này chúng tôi đang gọi điện thoại một phương pháp nhưng tuyên bố vẫn tương đương với điều tương tự như ví dụ 1
* Một điều trong hướng dẫn có một chút nhầm lẫn. Tôi nghĩ rằng 'điều này' luôn luôn đề cập đến đối tượng cha mẹ vì vậy trong trường hợp này 'a' vẫn là đối tượng cha mẹ. Nhưng (tại 05.23 trong hướng dẫn), anh ta không phải là trường hợp, nói rằng "có thể có những lúc bạn muốn 'cái này" ám chỉ đối tượng cha của nó, đó là' obj '"trong sự kiện mà anh tạo ra, ví dụ.
Ví dụ: 3
var obj = {
doIt: function(){
console.log(this);
}
}
$('a').on('click', function(e){
obj.doIt();
};
e.preventDefault();
Trong trường hợp này "này đề cập đến đối tượng obj"
Tôi đoán này đến với thực tế là 'này' được trong một hàm lồng nhau như tuyên bố này tương đương với:
$('a').on('click', function(){
function(){ console.log(this);}
};
e.preventDefault();
Tôi thực sự không hiểu lý do tại sao, đặc biệt là khi tôi đọc trong một bài báo trong các hàm lồng nhau 'this' "bị mất và tham chiếu đến đối tượng đầu (đối tượng cửa sổ)".
Eg4
var obj = {
doIt: function(){
console.log(this);
}
}
$('a').on('click', function(e){
obj.doIt.call(this);
e.preventDefault();
});
Trong trường hợp này "này đề cập đến 'a'"
Theo Javascript Definitive Guide "Đối số đầu tiên cho cả cuộc gọi() là đối tượng mà chức năng này được gọi là " Ở đây" này "được sử dụng làm đối số đầu tiên. Nhưng "điều này" không phải là đối tượng mà trên đó hàm được gọi?
Tôi nghĩ rằng tôi nhận được hàm gọi ở đó để gọi hàm và sử dụng tham số đầu tiên của nó làm con trỏ đến một đối tượng khác nhưng tôi không hiểu tại sao sử dụng 'this' có nghĩa là hàm được gọi bởi 'a'. Nó không phải là một cái gì đó tôi đã nhìn thấy trong cuộc gọi khác() ví dụ hoặc.
Xin lỗi vì bài đăng khổng lồ này.Hy vọng rằng ai đó vẫn đang đọc theo giai đoạn này…
+1 vì đã quá muộn để tôi bắt đầu trả lời vào câu hỏi tuyệt vời này. Không có nghi ngờ một người khác sẽ sớm - đó là một điểm quan trọng và một trong đó thường được bảo hiểm kém trong JS hướng dẫn. – jimw
* "Tôi nghĩ 'điều này' luôn đề cập đến đối tượng cha mẹ ..." * Không, đừng nghĩ 'điều này' làm đối tượng cha mẹ. Hãy nghĩ về nó như là một ngữ cảnh * gọi * có giá trị có thể được thiết lập theo nhiều cách khác nhau, một trong số đó xảy ra khi gọi một phương thức từ một đối tượng. –