// 该方法被绑定在jQuery对象上,只能通过$.noConflict()调用
noConflict: function( deep ) { // 取消$在window上的绑定,方法是将_$绑定到window对象上,从而解除其对jQuery的引用 if ( window.$ === jQuery ) { window.$ = _$; } // 如果传入参数deep为ture,说明用户解除window对象的jQuery属性对jQuery对象的引用,执行$同样的操作 if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } // 返回jQuery对象,目的是让其它参数或者对象的属性可以引用到它 return jQuery; },// 判断参数中传入的对象是不是函数
isFunction: function( obj ) {
return jQuery.type(obj) === "function"; },// 判断参数是不是windwo对象
isWindow: function( obj ) {
//这是怎么判断的?利用构造器吗? return obj != null && obj === obj.window; },// 判断参数是不是数字,该数字不一定是number类型。
isNumeric: function( obj ) {
// 先判断obj是否可转换为数字,并判断该数字是可穷尽的 return !isNaN( parseFloat(obj) ) && isFinite( obj ); },// 如果这个对象中没有任何键,则说明他是个空对象。其原型链最顶端的Object.prototype中的属性和方法是不能被遍历的
isEmptyObject: function( obj ) {
var name; for ( name in obj ) { return false; } return true; },// 将第二个数组或者对象合并到第一个数组或对象当中 extend扩展对象和merge合并数组
merge: function( first, second ) { var l = second.length, i = first.length, j = 0; // 如果第二个参数是个数组 // 但是如果第二个对象是类数组呢?我试过的是会丢弃掉类的部分而只merge数组的部分。这是不是jQuery的bug呢? if ( typeof l === "number" ) { for ( ; j < l; j++ ) { // 将第二个参数添加到第一个参数的后面 first[ i++ ] = second[ j ]; } // 如果第二个数组中还有值,则继续merge到第一个数组中 } else { while ( second[j] !== undefined ) { first[ i++ ] = second[ j++ ]; } } //当时数组时,重新设置length的长度,但这不是自动改变的吗????? first.length = i;return first;
},