1.JQuery.extend(dest, src1, src2, src3);
解析:将 src1, src2...合并到 dest 中,同时修改了 dest 结构,为避免结构的修改,可以使用:
var newSrc = $.extend({}, src1, src2, src3...)
e.g: var result = $.extend({}, {name:"Tom", age:21}, {name:"Jerry", sex:"Boy"});
结果:result = {name:"Jerry", age:21, sex:"Boy"}; //浅拷贝,若需要深度拷贝,则 $.extend(boolean, {}, src1...) 中 boolean 为 true。
资料:http://www.jb51.net/article/71924.htm
2.JQuery 对象
解析:jQuery 对象就是 jQuery.fn.init 的实例,可对 DOM 节点进行链式操作,精简代码如下:
var jQuery = function( selector, context) {
return new jQuery.fn.init( selector, context, rootjQuery );
}
e.g: var $obj = return new jQuery.fn.init( "div", context, rootjQuery ); // $("div")
闪点:jQuery 这个构造函数,为什么不直接返回 jQuery 对象,而是调用另外的方法?
解析:简化实例化操作,统一接口,提高效率。
3.JQuery 插件机制
解析:结合 2,init.prototype 指向 jQuery.fn ,即当 fn 添加属性时, new init() 得到的实例也随之新增属性。
源码:jQuery.fn = jQuery.prototype; jQuery.fn.init.prototype = jQuery.fn;
e.g: $.fn.method = function(){}; $(selector).method();
$.fn.extend(method) = $.fn.method;
4.JQuery 静态方法入口
解析:类的方法,不用构造对象,直接使用,需要与原型私有方法区别开。
jQuery.extend({md: function(){}, ...}); $.md();
e.g: var Fn = function(){}; Fn.extend = function() {}; console.log(Fn.extend()); //直接输出静态方法
5.