学习JQuery时对$(...)操作后返回的jQuery对象具有如此灵活的操作方法感到惊讶,阅读JQuery源码后逐步明白一些道理。
下面仿照JQuery构造一个超简单的框架,以说明对JQuery的理解。
var jQuery = $ = function(selector){
return new jQuery.fn.init(selector);
};
使用jQuery(...)和$是一样的,都是返回一个对象,这个对象是由jQuery.fn.init的构造体构造的,这个对象有什么来头呢 ?
jQuery.fn = jQuery.prototype = {
init:function(selector){
var elem = document.getElementById(selector);
this[0] = elem;
this.length = 1;
return this;
},
each:function(method){
for(var i=0; i<this.length; i++){
method.call(this[i],i);
}
}
};
可见,返回的是一个数组,所以并没有什么神秘的东西。
但这个数组还不能进行each的操作,需要扩展其原型方法,下面的这句很重要:
jQuery.fn.init.prototype = jQuery.fn;
这样,通过$(...)得到的对象就能进行each调用了。
下面测试一下:
<div id="myid">测试内容</div>
<script>
$('myid').each(function(i){
alert(i+":"+this.id+":"+this.innerHTML);
});
</script>
确实可以运行,运行结果如下图:
本文构建了一个极简的JQuery框架版本,通过模仿JQuery的核心构造过程,解释了如何使用构造函数和原型方法实现DOM元素的选择与迭代。该文通过一个具体的示例展示了如何创建并使用自定义的JQuery对象。
2万+

被折叠的 条评论
为什么被折叠?



