2011-08-20 34 views
7
var myVar = $([]); 

jQuery này làm gì?

Ứng dụng có khởi tạo biến thành một bộ jQuery rỗng không? Tôi đã tìm kiếm tài liệu jQuery nhưng chưa tìm thấy giải thích cho cú pháp này.

Trích từ các tài liệu jQuery http://api.jquery.com/jQuery/

Việc trả lại Set Rỗng -

Tính đến jQuery 1.4, cách gọi phương thức không có đối số jQuery() trả về một bộ jQuery rỗng (với một tài sản dài 0). Trong các phiên bản trước của jQuery, điều này sẽ trả về một tập hợp chứa nút tài liệu.

Vì vậy, có thể $([]) là phương pháp kế thừa để trả lại bộ jQuery trống hoặc thực hiện điều gì đó hoàn toàn khác?

+4

Legacy (từ mã cũ hoặc thói quen cũ) và/hoặc rõ ràng (bằng cách lựa chọn/ưu tiên), vâng. Có nhiều cách khác nhau để nuôi một con mèo. (Nó tạo ra một đối tượng jQuery "trống" mới.) –

+2

Bạn đã trả lời câu hỏi của riêng bạn. –

+0

;) Thật tuyệt khi được chắc chắn. Cám ơn vì đã xác nhận! –

Trả lời

1

Mặc dù có nhiều cách khác nhau để diễn giải "di sản" (như trong nhận xét của pst), biểu thức được ghi lại chính xác. Chúng ta biết rằng $ chức năng cũng giống như jQuery nên nhìn lên jQuery chúng ta thấy nó có thể chấp nhận đối số dưới các hình thức khác nhau:

  • jQuery(selector, [context])
  • jQuery(element)
  • jQuery(elementArray)
  • jQuery(jQueryObject)
  • jQuery()

Người chấp nhận một mảng phần tử được ghi nhận như sau:

  • elementArray: Một mảng chứa một tập các phần tử DOM để quấn trong một đối tượng jQuery.

Câu trả lời cho câu hỏi của bạn "Vì vậy, có thể $([]) là phương pháp kế thừa để trả lại bộ jQuery trống hoặc thực hiện điều gì đó hoàn toàn khác?" theo nghĩa là không, nó không làm gì khác. Bạn nhận được một đối tượng jQuery với tất cả các phần tử trong mảng trống của bạn. Tất cả đều là số không.

Và như bạn đã đề cập trong câu hỏi của mình, kể từ 1.4, đồng bằng ol '$() cung cấp cho bạn tập hợp trống và vì vậy tôi lấy nó rằng đây có thể là cách ưa thích để làm mọi thứ ngay bây giờ. Điều đó nói rằng, $([]) là tốt đẹp và rõ ràng, và vẫn được hỗ trợ.

1

$(obj) cho phép bạn tạo một đối tượng jQuery trống rỗng, nhưng điều này là khác nhau từ $()

Ví dụ: Tôi có một giải pháp namespaced mà cần phải có sự kiện tùy chỉnh mà có hành động dựa trên một đối tượng tập trung. Tôi đã viết lớp EventHandler của riêng tôi về cơ bản bao bọc xung quanh một cá nhân $({})

Điều này cho phép tôi có một đối tượng có thể hoạt động như người tổ chức sự kiện và trình kích hoạt của tôi. Tôi phơi bày bind(), unbind() và trigger() trong lớp EventHandler của tôi.

$() mặt khác không cho phép bạn liên kết và kích hoạt vì không có đối tượng cơ sở. Tôi không hoàn toàn chắc chắn ý tưởng của họ khi làm điều này vì nó sẽ có ý nghĩa hơn để có đối tượng jQuery "mặc định" hoặc "trống" là $({})

Ngắn câu chuyện: có những thứ mà $({}) thực hiện điều đó $() không . Nhưng $([])$() dường như hành động giống với số lượng thử nghiệm tối thiểu tôi đã thực hiện. Có lẽ $(new Array()) vẫn hoạt động khác, nhưng tôi không quan tâm nghiên cứu nó.

EDIT với ví dụ:

var testA = $(); 
testA.bind('customEvent', function() { alert('empty custom'); }); 
testA.trigger('customEvent'); // will not get an alert 

var testB = $({}); 
testB.bind('customEvent', function() { alert('object custom'); }); 
testB.trigger('customEvent'); // will get an alert 


var testC = $([]); 
testC.bind('customEvent', function() { alert('array custom'); }); 
testC.trigger('customEvent'); // acts like testA 
+0

Bạn sẽ ràng buộc hoặc kích hoạt trong một bộ nút trống nào? –

+0

'[]' là một 'đối tượng'. Ví dụ: mã của tôi có các sự kiện như 'myDataLoaded' mà mô-đun tải dữ liệu JS của tôi kích hoạt. Vì mô-đun không phải là đối tượng DOM nên nó không có các sự kiện riêng và vì tôi không muốn tiếp tục tìm kiếm thông qua các mô-đun của mình cho các sự kiện, tôi chỉ đăng ký nó với đối tượng xử lý sự kiện hơi toàn cục của mình. Bằng cách đó, một số mô-đun khác có thể đăng ký sự kiện tùy chỉnh của tôi mà không cần biết về kích hoạt hoặc nơi kích hoạt xuất phát. –

+0

'[]' là một đối tượng mảng, vâng. Vì thế? '$()' cung cấp cho bạn một đối tượng cũng như '$ ([])'. –

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