jQuery(); //[]
jQuery("#footer"); //[<div id="footer">...</div>]
Tôi biết rằng bạn có thể làm một cái gì đó như thế này:Làm thế nào để jQuery làm cho giá trị trả về trông giống như một mảng?
function kablam(tag) {
var els = document.getElementsByTagName(tag);
els.isKablam = true;
return els;
}
var body = kablam("body"); //[<body class="ask-page">...</body>]
body.isKablam; //true
Để trở về một "đại gia" phiên bản của NodeList
đó là trở về từ document.getElementsByTagName
.
Tuy nhiên, jQuery thực hiện ngược lại. Nó kết hợp các kết quả vào chính nó (như có thể được nhìn thấy here và here). Hơn nữa, điều đó không giải thích làm thế nào nó trả về một mảng giống như đối tượng-trông giống như một mảng khi bạn không truyền bất cứ thứ gì cho nó:
jQuery(); //[]
Khi bạn làm điều đó, jQuery đơn giản trả về chính nó. (source)
Hoặc để cùng gia hạn, khi bạn chọn thẻ nội dung:
jQuery("body"); //[<body class="ask-page">...</body>]
(source)
Hoặc, đến để suy nghĩ về nó, bất cứ điều gì ở tất cả:
var o = {}, body = document.getElementsByTagName("body");
jQuery.merge(o, body); //Object, not [...]
Trả về các đối tượng giống như mảng là siêu dễ dàng, vì việc gán các phím số là tầm thường và không khác với gán bất kỳ khóa nào khác. Nhưng làm thế nào để jQuery làm cho nó "trông giống như" một mảng?
Tôi khá chắc chắn '.push' là không cần thiết :) –
Ngoài ra, nó không cần phải được trên nguyên mẫu. Hãy thử điều này trong giao diện điều khiển: 'a = {length: 0, splice: function() {}}' – Shmiddty