2012-07-09 30 views
5

ví dụ,Giá trị trả về của jQuery là Array, nhưng hàm tạo là Object. làm sao?

$(document) // [ #document ] : document object in array 
typeof $(document) // "object" 
$(document).constructor // function Object() { [native code] } or function (a,b) { return some function; } 

Nếu giá trị là mảng, nó phải là mảng xây dựng.

Nó không phải là một mảng như đối tượng. bởi vì mảng như đối tượng chỉ có thuộc tính mảng, không giống như [].

Làm cách nào?

thêm: Nếu bạn có thể, hãy hiển thị mã ví dụ đơn giản, vui lòng. như

a = ... 
console.log(a) // [ ... ] 
console.log(a.constructor) // function Object or something 
+0

Tôi không hiểu lý do tại sao sự trở lại từ '$ (tài liệu)' là "không phải là mảng giống như đối tượng" - nếu bạn nhìn vào nguồn jQuery thực tế bạn sẽ thấy nó _is_ một mảng giống đối tượng và _not_ một mảng ... – nnnnnn

+0

@nnnnnn vì đối tượng giống mảng không được hiển thị dưới dạng [] – Ephemera

+0

"Được hiển thị" ở đâu? Sự trở lại từ '$ (document)' là một thể hiện của 'jQuery.fn.init' đã có các thuộc tính' 0' và 'length' được thêm vào. Nếu nó là một 'mảng 'nó sẽ có các phương thức mảng như' .join() 'và nó không có. _Nhìn vào mã nguồn._ – nnnnnn

Trả lời

3

Hãy nhìn vào jQuery source. $(document) tạo đối tượng jQuery nhân bản của phần tử tài liệu và sau đó tạo và trả về một array-like object.

jQuery chức năng nhà máy $() trả về một đối tượng jQuery có nhiều của các thuộc tính của một mảng (một chiều dài, toán tử [] truy cập mảng, vv), nhưng không phải là chính xác giống như một mảng và thiếu một số phương thức dựng sẵn của mảng (chẳng hạn như .pop() và .reverse()).

+0

Bây giờ tôi đang bối rối. Nếu nó trả về một mảng các đối tượng thì hàm tạo của nó không cho 'hàm Array() {// ..}'? – boring

+1

Nó không tạo hoặc trả về một mảng, nó trả về một thể hiện của 'jQuery.fn.init' sau khi thêm các thuộc tính' 0' và 'length'. Nghĩa là, nó trả về một đối tượng giống như mảng. – nnnnnn

+0

Câu trả lời được làm rõ. – RobB

0

Một mảng, như trong [], cũng là một đối tượng trong JavaScript. Trong JS hầu hết mọi thứ là một đối tượng, chẳng hạn như các chức năng, các mảng, các đối tượng theo nghĩa đen, biểu thức thông thường ... Để thực sự biết những gì bạn đang làm việc với một mảng, bạn có thể làm điều này là:

Object.prototype.toString.apply(myarray) === '[object Array]' 
Các vấn đề liên quan