当前位置: 代码迷 >> 综合 >> $.extend(),$.fn.extend()扩展方法及相关方法
  详细解决方案

$.extend(),$.fn.extend()扩展方法及相关方法

热度:82   发布时间:2023-10-12 17:57:00.0

Query开发插件的两个方法:

  • 1.$.extend(object);为扩展jQuery类本身,为类添加新的方法,添加类的静态方法。
  • 2.$.fn.extend(object);给jQuery对象添加方法。

jQuery.fn

jQuery.fn = jQuery.prototype = {init: function(selector, context) {
    //内容}
}

2.jQuery.fn = jQuery.prototype

jQuery.extend(object)

为jQuery类添加类方法,可以理解为添加静态方法。如:

jQuery.extend({min: function(a, b) {
     return a < b ? a : b; },max: function(a, b) {
     return a > b ? a : b; }
});
jQuery.min(2,3); // 2 
jQuery.max(4,5); // 5

Query.extend( bool,target, object1, [objectN])

  • extend(result,item1,item2…..)
    这里这个方法主要用来合并,将所有的参数项都合并result中,并返回result,一般result直接写成 {}
  • extend(bool,{},item1,item2….)
    Extend方法还有带bool型参数的重载。
    bool型参数为true表示深拷贝,为false时表示浅拷贝。具体可以通过一下示例来说明:
示例:
var item={
   name:“olive”,age:23,address{provice:”河南”,city:”郑州”}};
var item1={sex:”girl”,address{city:”北京”}};
var result=$.extend(true,item,item1);
var result1=$.extend(false,item,item1);结果:
Result={
   name:“olive”,age:23,sex:”gril”,address:{provice:”河南”,city:”北京”}};
Result1={
   name:“olive”,age:23,sex:”gril”,address:{ city:”北京”}};说明:
以上结果说明,当参数为ture时,即为深拷贝,当子项item1中的子项有与item中的子项相同属性的值不一样时,
item1中子项的值会将item子项中的值给覆盖,当子项item1的属性跟item中的属性不同时,会与item进行合并。当参数为false时,子项item1中的子项中与item中的子项属性相同时,item1中子项的属性值会将item中的值给完全覆盖。

jQuery.fn.extend(object);

对jQuery.prototype进得扩展,就是为jQuery类添加“成员函数”。jQuery类的实例可以使用这个“成员函数”。

比如我们要开发一个插件,做一个特殊的编辑框,当它被点击时,便alert 当前编辑框里的内容。可以这么做:

$.fn.extend({          slider:function() {
                $(this).click(function(){
                     alert(111);           });           }       
}); 
也可以写成:$.fn.slider:function() {
                $(this).click(function(){
                     alert(111);           });           
}  
$("#box").slider();   

$(“#box”) 为一个jQuery实例,当它调用成员方法 slider 后,便实现了扩展,每次被点击时它会先弹出目前编辑里的内容。

jQuery.extend() 的调用并不会把方法扩展到对象的实例上,引用它的方法也需要通过jQuery类来实现,如jQuery.init(),而 jQuery.fn.extend()的调用把方法扩展到了对象的prototype上,所以实例化一个jQuery对象的时候,它就具有了这些方法,这 是很重要的,在jQuery.js中到处体现这一点

jQuery.fn.extend = jQuery.prototype.extend

你可以拓展一个对象到jQuery的 prototype里去,这样的话就是插件机制了。

(function( $ ){
    $.fn.tooltip = function( options ) {
    
};
//等价于
var tooltip = {function(options){
    
}
};
$.fn.extend(tooltip) = $.prototype.extend(tooltip) = $.fn.tooltip
})( jQuery );

相关链接:http://caibaojian.com/jquery-extend-and-jquery-fn-extend.html
https://www.cnblogs.com/linjiaxin/p/7363143.html