2011-08-29 38 views
15

Tôi không phải là người giỏi nhất và tôi bắt gặp một khởi tạo var mà tôi không biết tại sao người viết mã đã làm theo cách này.

Trong init cho một plugin, chúng tôi có

this.init = function(settings) { 
    var $this = this; 
    this.s = { 
     initialSlide: 0, 
     firstSlide: true, 
    }; 
    ... more code, some uses $this, some uses "this" 
} 

Vì vậy, sự khác biệt ở đây là gì giữa "$ này" và "đây" và tại sao không sử dụng một hay cách khác tất cả các thời gian?

+0

có nó, nó là một thành ngữ jquery –

+0

@Matt: Không có jQuery trong mã. Việc gán 'this' cho biến khác cũng rất phổ biến trong" JavaScript thuần túy ". –

+0

@Felix: Đây là một plugin, có nghĩa là điều này đề cập đến một đối tượng jquery. Có (hoặc từng là) một thành ngữ jquery cho các đối tượng jquery tiền tố với $. do đó, nó là một câu hỏi jquery. Nếu nó không phải jquery, thay vì $ này bạn có thể sẽ thấy, đó, tự, hoặc một cái gì đó mô tả nhiều hơn về những gì điều này thực sự có nghĩa là –

Trả lời

31

Nói chung, điều này có nghĩa là bản sao this. Điều về this là nó thay đổi trong mỗi chức năng. Tuy nhiên, việc lưu trữ theo cách này giữ $this thay đổi trong khi this sẽ thay đổi.

jQuery sử dụng nhiều giá trị ma thuật this.

xem xét mã này, nơi bạn có thể cần một cái gì đó giống như bạn đang nhìn thấy:

$.fn.doSomethingWithElements = function() { 
    var $this = this; 

    this.each(function() { 
     // `this` refers to each element and differs each time this function 
     // is called 
     // 
     // `$this` refers to old `this`, i.e. the set of elements, and will be 
     // the same each time this function is called 
    }); 
}; 
+0

cho phiên bản cũ hơn của jQuery làm thế nào để bạn viết $ này? jQuerythis ?? – Hitesh

+1

var $ này cũng giống như bất kỳ tên biến nào khác, $ và đây chỉ là một cách để giữ một người khác đọc mã để biết biến nào tiếp tục giảm xuống trên trang. Trong ngắn hạn, có bạn có thể viết 'var jQuerythis' nhưng điều đó không thực sự làm cho bất kỳ sự khác biệt. Bạn có thể sử dụng $ trong jQuery cũ hơn, như đã nói ở trên $ this isnt jQuery phụ thuộc, nó chỉ là một cách để tạo một bản sao của 'this'. –

5

Trong trường hợp này, không có gì. $this chỉ là một tuyên bố biến khác, trong đó có this được gán cho nó.

Thông thường, tôi đã thấy lối tắt này được những người sử dụng thư viện JavaScript sử dụng khi gói this. Ví dụ: cách sử dụng thông thường trong jQuery sẽ là:

// rather than writing $(this) everywhere 
var $this = $(this); 

$this.each(function(){ 
    // Do Something 
}); 
0

Nó có ý nghĩa gì trong trường hợp này (không có ý định chơi chữ). Sẽ hợp lý hơn nếu tuyên bố là var $this = $(this) vì điều đó sẽ cho phép tất cả các chức năng jQuery đẹp được sử dụng.

+0

Không chính xác, chỉ định lại điều này cho một biến khác nhau cho phép các bao đóng bên trong tham chiếu phạm vi bên ngoài. – Evert

0

Những gì mọi người khác nói, cũng có một thành ngữ trong mã jquery để tiền tố đối tượng jquery với $. không biết làm thế nào phổ biến nó là bất kỳ chi tiết, nhưng được sử dụng để xem rất nhiều của nó.

0

Tôi làm $ this = $ (this) vì có vẻ như nó sẽ lưu việc xử lý thực sự cuộc gọi đó mỗi lần bạn muốn sử dụng nó.

Ngoài ra, đối với chức năng '' ma thuật '' này mà người khác đã đề cập. Nó rất tiện dụng để giữ bản gốc.

0

Trong thực tế jQuery là một trình bao bọc xung quanh JavaScript DOM, cả hai đều nâng cao và đơn giản hóa nó. Rất ngắn gọn JQuery selectors trở JQuery Object/s tức là

var jQueryResults = $("article"); //Contains all article elements in the DOM as JQuery objects 

Tuy nhiên, việc lựa chọn các yếu tố với Javascript trả về phần tử HTML DOM tức

var normalResults = document.getElementsByTagName("article");//Contains all article elements in the DOM as HTML objects 

Những vấn đề nảy sinh ở chỗ đối tượng DOM không cung cấp các chức năng tương tự mà Các đối tượng JQuery cung cấp.

Dưới đây là một ví dụ sự kiện đó cho thấy sự khác biệt:

$('.changeColorHover').hover(function() { 
    this.attr("style", "color:red"); 
}); //Will not work as we are trying to call a JQuery method on a DOM object 

Với nêu trên trong tâm trí từ khóa 'này' là một đối tượng DOM và do đó bạn được yêu cầu phải chuyển nó sang một đối tượng jQuery để để sử dụng các phương thức jQuery.

$('.changeColorHover').hover(function() { 
     $(this).attr("style", "color:red"); 
}); //Will work since we have first converted the DOM object to a JQuery object 

Để tổng hợp, từ khóa này, cho phép bạn truy cập đối tượng được gọi là sự kiện này sẽ tham chiếu đến đối tượng đã nêu sự kiện. Tuy nhiên, đây là một đối tượng DOM, không phải là một đối tượng jQuery. Kết quả là, bất kỳ phương thức jQuery nào bạn muốn sử dụng không có sẵn, trừ khi bạn chuyển đổi nó thành một đối tượng jQuery.

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