您的位置:首页 > Web前端 > JQuery

献给和我合作的过得前端童靴们:jquery源码分析--核心函数(包装对象和holdReady方法)

2016-04-20 18:14 906 查看
包装对象

包装对象其实之前已经有提过了。这里就再仔细的说一下。

init = jQuery.fn.init = function( selector, context, root ) {
jQuery.makeArray( selector, this );
}
makeArray: function( arr, results ) {
var ret = results || [];
if ( arr != null ) {
if ( isArrayLike( Object( arr ) ) ) {
jQuery.merge( ret,
typeof arr === "string" ?
[ arr ] : arr
);
} else {
push.call( ret, arr );
}
}
return ret;
}


isArrayLike 判断是否是数组

是数组,使用 jQuery.merge 方法合并数组中的每一个元素

不是数组,使用的是 push 方法,之前在序中提到过 jQuery.fn 是一个数组, “push.call( ret, arr )” 相当于 jQuery.fn .push( arr )。

holdReady方法

jQuery.extend({
readyWait: 1,
isReady: false,
holdReady: function( hold ) {
if ( hold ) {
jQuery.readyWait++;
} else {
jQuery.ready( true );
}
},
ready: function( wait ) {
if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
return;
}
jQuery.isReady = true;
if ( wait !== true && --jQuery.readyWait > 0 ) {
return;
}
readyList.resolveWith( document, [ jQuery ] );
if ( jQuery.fn.triggerHandler ) {
jQuery( document ).triggerHandler( "ready" );
jQuery( document ).off( "ready" );
}
}
})


1.之前分析过 “jQuery.ready”方法不再重复。该方法只控制控制“jQuery.ready”方法,而“jQuery.ready”方法会在“onload”事件的时候执行,所以 “jQuery.holdReady”方法只能用在“ $(function(){})”外,放在内部是无效果的。

2.具体控制 “jQuery.ready”执行是由 “jQuery.readyWait和jQuery.isReady”两个属性控制,“jQuery.readyWait”相对权重高一点。

到现在为止,创建jQuery对象已经分析完毕,接下来分析就是一个重头戏,jQuery选择器, 先容我吐槽一下 选择器。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: