我正在构建一个非常小的库/框架,作为我理解jQuery及其核心工作原理的一部分。
我想知道如何将jQuery选择器元素作为jQuery对象返回并拥有jQuery的所有方法。例如:
$('ul li').each(function(){
console.log($(this));
})
$(this)是对DOM元素< li> 的jQuery对象的引用,并且具有jQuery的所有方法。
日志显示:
[li, context: li, jquery: "2.1.0", constructor: function, selector: "", toArray: function…]
0: li
context: li
length: 1
__proto__: Object[0]
以下是lib的一小部分,说明了我如何处理初始化和each
方法。
(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从原型返回一个方法。基本上没有$的原型,因为$是对未实例化的函数/对象的引用。
答案 0 :(得分:1)
for ( i in stack ) {
if ( typeof stack[i] === 'object' )
callback(i, new Lib(stack[i]));
}
}