JQuery源码解读 JQ的一些扩展工具方法( 妙味讲堂 - 视频笔记 - 第三部分) //工具方法: 方便底层实现调用 // 一、 // 源码实现: expando: "jQery" + (core_version + Math.random()).replace(/D/g, ""); //生成唯一JQ字符串(内部) var $ = 123; // 二、 // 源码实现: noConflict: function(deep) { if (window.$ === jQuery) { window.$ = _$; } if (deep && window.jQuery === jQuery) { window.jQuery = _jQuery; } return jQuery; } var aaa = $.noConflict(true); aaa(function() { alert(jQuery) // 123 }) // 三、 //DOM加载完就执行 // 1、 $(function() { }) => // 2、 $(document).ready(function() { }) => // 3、 $().ready(); ready: function() { } //监听 DOMContentLoaded 事件 => // 4、 jQuery.ready.promise().done(fun) => // 5、 $.ready(); if (document.readyState === "complete") { } else { // complete } // 6 readyList.resolveWidth(document, [jQuery]) // 7、 => fn // 文件加载完 window.onload = function() { } // 四、 $.holdReady(true) //推迟执行,ready() 不能执行 $(function() { alert() }) $.holdReady(false) //推迟释放,ready() 可以执行 $.holdReady(true) $.getScript('a.js', function() { //异步,想要异步执行完再执行ready $.holdReady(false) }) $(function() { console.log(2) }) // 五、 function aaa() { } var bbb = "123" console.log($.isFunction(aaa)) // true console.log($.isFunction(bbb)) // false // 源码实现: isFunction: function() { return jQuery.type(obj) === "function"; } // 源码实现: isWindow: function(obj) { return obj != null && obj === obj.window } // 源码实现: isNumeric: functiono(num) { return !isNaN(parseFloat(obj) && isFinite(obj)) // parseFloat 装换笔面试NaN isFinite 判断是否是有限数字 } 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 }