JQuery源码解读__3__一些工具方法

244 阅读1分钟

JQ的一些扩展工具方法( 妙味讲堂 - 视频笔记 - 第三部分)

工具方法: 方便底层实现调用

 一、生成jQuery版本号

 源码实现:

expando: "jQuery" + (core_version + Math.random()).replace(/\D/g, ""); 
//生成唯一JQ字符串(内部)

 二、冲突检测

 源码实现:

noConflict: function(deep) { 
   if (window.$ === jQuery) {   
     window.$ = _$;   
 }    
if (deep && window.jQuery === jQuery) {   
     window.jQuery = _jQuery; 
   }   
 return jQuery;
}
var $ = 123;
var aaa = $.noConflict(true);
aaa(function() {  
  alert(jQuery) // 123
})

三、生命周期函数

DOM准备完毕ready()
$(function() {})
  
$(document).ready(function() {    }) 
  
$().ready();ready: function() {    } 
//监听 DOMContentLoaded 事件    

jQuery.ready.promise().done(fun)  

$.ready();if (document.readyState === "complete") {} else {}

readyList.resolveWidth(document, [jQuery])
DOM加载完毕 onload() 

//  文件加载完,包括图片等媒体文件记载完
window.onload = function() {}

四、holdReady()

$.holdReady(true) //推迟执行,ready() 不能执行
$(function() {  
  alert()
})
$.holdReady(false) //推迟释放,ready() 可以执行
$.holdReady(true)
$.getScript('a.js', function() { //异步,想要异步执行完再执行ready 
   $.holdReady(false)
})
$(function() { 
   console.log(2)
})

 五、isFunction()

判断参数是不是函数

 源码实现:

isFunction: function() {
    return jQuery.type(obj) === "function";
}
//实例
function aaa() {
}
var bbb = "123"
console.log($.isFunction(aaa)) // true
console.log($.isFunction(bbb)) // false

 六、isWindow()

判断是不是window对象

 源码实现:

isWindow: function(obj) {  
  return obj != null && obj === obj.window
}
//实例
console.log(isWindow(this));//非严格模式 true;严格模式false
七、isNumeric()

判断是不是数字

源码实现:

isNumeric: functiono(num) { 
   return !isNaN(parseFloat(obj) && isFinite(obj)) 
   // parseFloat 装换笔面试NaN  isFinite 判断是否是有限数字
}

八、type()

判断参数类型

typeOf(); //只能判断基本类型
源码实现:

type: function(obj) {  
  if (obj == null) { 
       return String(obj);
    }   
 return typeof obj === "object" || typeof obj === 'function' ?    
    class2type[core_toString.call(obj)] ||  "object" : typeof obj
}