jQuery插件的开发分两种:静态方法 jQuery.extend() 和实例方法 jQuery.fn.extend();
想研究源码,起码你要知道这两个方法的用法。这样才能更容易去探索源码的奥秘。
一. jQuery.extend()
- jQuery.extend( target, object1 , objectN )
- jQuery.extend( deep , target, object1 , objectN )
target,object1,objectN都是指对象,target 指目标对象, deep 是布尔值,表示是否深拷贝。
如果只有一个参数提供给$.extend(),这意味着目标参数被省略。在这种情况下,jQuery对象本身被默认为
目标对象。这样,我们可以在jQuery的命名空间下添加新的功能。
jQuery.extend( target, object1 , objectN ) 使用例子(例子测试时,不要忘记引入jquery文件)
由打印结果可以看出来,jQuery.extend( target, object1 , objectN ),后面对象的属性方法会添加给第一个目标对象,但是注意,前面对象所存在的属性或方法会被后面对象所存在相同的属性或方法所覆盖。
还是上面的例子,我们瞧瞧 jQuery.extend( deep , target, object1 , objectN )是什么效果
传值 true 时是深拷贝,在对象上进行了递归的合并。这里要注意一点。api中有警告:不支持第一个参数传递 false 。
二. jQuery.fn.extend( object )
这个方法是:一个对象的内容合并到jQuery的原型,以提供新的jQuery实例方法。jQuery.fn.extend()方法继承了jQuery原型($.fn)对象,以提供jQuery原型新的方法,可以链式调用jQuery()函数。
|
|
源码中jQuery.extend = jQuery.fn.extend = function() {} ,两个方法是指向同一个函数的,那么他是怎样实现不同的功能呢?下面这段是jq源码的实现:
jQuery.fn.extend();方法中只能传入一个对象,这样这个对象合并到 jQuery 的原型。否则是跟$.extend的功能是一样的。在(二)的例子中:
因为没有 this 的指向,就不能通过实例对象调用。
2017-11-14