2010-10-31 37 views
23

each() phương pháp trong jQuery chứa một tuyên bố như vậy:Ý nghĩa của "callback.call (value, i, value)" trong mỗi phương thức của jQuery là gì?

callback.call(value, i, value) 

Tôi không thể hiểu những gì tuyên bố này có nghĩa là chính xác.

Tôi biết những gì callbackcall có nghĩa là nhưng tôi không thể nhận được đối số của lệnh gọi hàm: (value,i,value). Điều đó có nghĩa là gì?

Tuyên bố được sử dụng cho một khối each() nhưng câu hỏi của tôi không phụ thuộc vào ngữ cảnh đó.

từ nguồn jQuery:

for (var value = object[0]; 
     i < length && 
     callback.call(value, i, value) // <=== LOOK! 
     !== false; 
     value = object[++i]) {} 

Trả lời

42

Phương thức call tồn tại trên tất cả các chức năng trong Javascript. Nó cho phép bạn gọi hàm và làm như vậy đặt giá trị của this trong hàm đó.

function myFunc() { 
    console.log(this); 
} 

myFunc.call(document.body); 

Trong ví dụ này, this trong myFunc sẽ document.body.

Thông số đầu tiên của call là giá trị được đặt là this; các tham số tiếp theo được truyền cho hàm như các tham số bình thường. Vì vậy, trong ví dụ của bạn:

callback.call(value, i, value) 

này tương đương với

callback(i, value) 

ngoại trừ, trong khi gọi lại, this bây giờ cũng thiết lập để value.

+0

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/call – Abdull

1

Phương pháp .each() gọi callback bạn vượt qua nó với các phần tử (lặp hiện "mục tiêu") khi cả hai đối tượng ngữ cảnh (giá trị của this) và là thứ hai tham số.

Như vậy, trong một trong những chức năng:

$('.foo').each(function(i, elem) { 
    var $this = $(this), $elem = $(elem); 

Các biến $this$elem là hoán đổi cho nhau.

Đối số đầu tiên cho .call() là giá trị mà this phải bị ràng buộc, nếu điều đó không rõ ràng. Phần còn lại của đối số cho .call() chỉ được chuyển dưới dạng đối số đơn giản cho hàm.

1

này gọi phương thức callback với this thiết lập để value (tham số đầu tiên call) và với các đối số ivalue. (Các tham số khác để call)

Các vấn đề liên quan