我正在構建一個非常小的庫/框架,作爲理解jQuery及其核心工作方式的一部分。jQuery選擇器元素如何也是jQuery對象
我想知道如何將jQuery選擇器元素作爲jQuery對象返回並具有jQuery的所有方法。例如:
$('ul li').each(function(){ console.log($(this)); })
的$(本)是參照jQuery對象爲DOM元素<利>並且具有的jQuery的所有方法。
日誌顯示這一點:
[li, context: li, jquery: "2.1.0", constructor: function, selector: "", toArray: function…] 0: li context: li length: 1 __proto__: Object[0]
這裏是說明我如何處理的初始化和each
方法的lib的一小部分。
(function(global, factory) {factory(global);}
(window, function(window) {
var document = window.document;
var LibInit = function(selector) {
return new Lib(selector);
};
function Lib (selector) {
this.selector = selector;
return this;
}
Lib.prototype = {
each: function(stack, callback) {
var i;
for (i in stack) {
if (typeof stack[i] === 'object')
callback(i, stack[i]);
}
return this;
}
}
window.Lib = LibInit;
}
));
Lib().each(document.querySelectorAll('ul li'), function(i,v){
console.log(v);
})
這個Lib每個都返回特定元素的直接DOM對象。 如何將其更改爲返回用Lib對象包裝的DOM對象。
對於複雜的解釋我很抱歉,只是想不出一個更好的解釋方法。
另外一個側面的問題。 $/jQuery的console.log如何爲init函數返回字符串,$ .plugin從原型返回一個方法。基本上沒有$的原型,因爲$是沒有實例化的函數/對象的引用。
'callback(i,$(stack [i]));'? –