• 理解jquery的$.extend()、$.fn和$.fn.extend()


    jQuery为开发插件提拱了两个方法,分别是:

    jQuery.fn.extend();

    viajQuery.extend();原文来自:http://caibaojian.com/jquery-extend-and-jquery-fn-extend.html

    jQuery.fn

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

    原来 jQuery.fn = jQuery.prototype.对prototype肯定不会陌生啦。

    虽然 javascript 没有明确的类的概念,但是用类来理解它,会更方便。

    jQuery便是一个封装得非常好的类,比如我们用 语句 $(“#btn1″) 会生成一个 jQuery类的实例。

    jQuery.extend(object)

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

    //code from http://caibaojian.com/jquery-extend-and-jquery-fn-extend.html
    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

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

    Jquery的扩展方法原型是:    

    extend(dest,src1,src2,src3...); 
    它的含义是将src1,src2,src3...合并到dest中,返回值为合并后的dest,由此可以看出该方法合并后,是修改了dest的结构的。如果想要得到合并的结果却又不想修改dest的结构,可以如下使用: 
    var newSrc=$.extend({},src1,src2,src3...)//也就是将"{}"作为dest参数。 
    这样就可以将src1,src2,src3...进行合并,然后将合并结果返回给newSrc了。如下例: 
    var result=$.extend({},{name:"Tom",age:21},{name:"Jerry",sex:"Boy"}) 
    那么合并后的结果 
    result={name:"Jerry",age:21,sex:"Boy"} 
    也就是说后面的参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值。 

    用一个或多个其他对象来扩展一个对象,返回被扩展的对象

    var settings = { validate: false, limit: 5, name: "foo" }; 
    var options = { validate: true, name: "bar" }; 
    jQuery.extend(settings, options); 
    结果:settings == { validate: true, limit: 5, name: "bar" }

    jQuery.fn.extend(object);

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

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

    $.fn.extend({          
        alertWhileClick:function() {            
              $(this).click(function(){                 
                     alert($(this).val());           
               });           
         }       
    });       
    $("#input1").alertWhileClick(); // 页面上为:    

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

    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 );

    总结
     
    jQuery.fn.extend(object);  给jQuery对象添加方法。需要获取jquery对象才可以调用 例如$(id class tag).方法
    jQuery.extend(object);  为扩展jQuery类本身.为类添加新的方法。(即静态方法)可以直接调用方法 例如$.方法
  • 相关阅读:
    Encryption (hard) CodeForces
    cf 1163D Mysterious Code (字符串, dp)
    AC日记——大整数的因子 openjudge 1.6 13
    AC日记——计算2的N次方 openjudge 1.6 12
    Ac日记——大整数减法 openjudge 1.6 11
    AC日记——大整数加法 openjudge 1.6 10
    AC日记——组合数问题 落谷 P2822 noip2016day2T1
    AC日记——向量点积计算 openjudge 1.6 09
    AC日记——石头剪刀布 openjudge 1.6 08
    AC日记——有趣的跳跃 openjudge 1.6 07
  • 原文地址:https://www.cnblogs.com/linjiaxin/p/6009437.html
Copyright © 2020-2023  润新知