ホームページ >ウェブフロントエンド >jsチュートリアル >jQueryのextend()とjQuery.fn.extend()の違いを詳しく解説

jQueryのextend()とjQuery.fn.extend()の違いを詳しく解説

青灯夜游
青灯夜游転載
2020-11-26 17:59:103069ブラウズ

jQueryのextend()とjQuery.fn.extend()の違いを詳しく解説

関連する推奨事項: 「jQuery ビデオ チュートリアル

1. jQuery について知るextend( ) と jQuery.fn.extend()

jQuery の API マニュアルでは、extend メソッドがマウントされていますjQuery と jQuery.fn には 2 つの異なるオブジェクトに対するメソッドがありますが、jQuery の内部コードは同じ実装ですが、関数は異なります。

#公式の説明を見てみましょう:

jQuery.extend() : 2 つ以上のオブジェクトの内容を最初のオブジェクトにマージします。(2 つ以上のオブジェクトを最初のオブジェクトにマージします);

jQuery.fn.extend():オブジェクトのコンテンツを jQuery プロトタイプにマージして、新しい jQuery インスタンス メソッドを提供します。(オブジェクトをマウントします。jQuery の ## に移動します)新しい jQuery インスタンス メソッドを拡張する #prototype 属性 )

##2. jQuery.extend()

まず、jQuery をクラスなのでわかりやすいです。 jQuery.extend() は拡張された jQuery クラスです。

jQuery クラスを、食べたり、飲んだり、走ったり、ジャンプしたりできる人間とみなすと、jQuery.extend メソッドを使用して、speak() でこのクラスを拡張します。スキル。この場合、男性でも、女性でも、○○な人でも…など、このスキル(メソッド)を継承することができます。

# は次のように記述できます:

JQuery.extend({
    speak:function(){
         alert("how are you!");
    }
});
呼び出しメソッドは次のとおりです:

<!DOCTYPE html>
<html>
<head>
    <title>jQuery.extend()与jQuery.fn.extend()区别</title>
    <meta charset="utf-8">
    <script type="text/javascript" src="jquery-1.7.1.js"></script>
    <script type="text/javascript">
        (function($){
               $.extend({
                   speak:function(){
                       alert("how are you!");
                   }
               });
        })(jQuery);    </script>
    <script type="text/javascript">
        $(document).ready(function(){
            $.speak();
        })    </script>
</head>
<body>
 
</body>
</html>
これは、$.speak) が jQuery クラス自体のメソッド (オブジェクト) になり、「話す」ことができるようになったということです。

しかし、この機能を使用できるのは、全人類を代表する jQuery クラス自体だけです。個人的に使いたいなら、張三李四王呉馬劉よ、小さな草の根が全人類を代表できるだろうか?

つまり、この拡張機能は

いわゆる静的メソッドであり、クラス自体にのみ関連します 。特定のインスタンス化されたオブジェクトとは何の関係もありません。

3.

jQuery.fn.extend()# について理解する文字通り理解すると、この拡張機能は jQuery.fn のメソッドです。 jQuery.fnとは何ですか?

jQuery.fn = jQuery.prototype = {
      init:funtion(selector,context){            //.....  
     }
}

つまり、jQuery.fn.extend は jQuery オブジェクト (プロトタイプ) のメソッドを拡張します。

オブジェクトは何ですか?これは、$("#abc")、$(p)

などのクラスのインスタンス化です。つまり、jQuery.fn.extend 拡張メソッドを使用する必要があります。 jQueryではオブジェクトの上にのみ!これを使用できるようにするには、Zhang、San、Li、Si、Wang、Wu、Liu などのインスタンス化されたオブジェクトである必要があります。

率直に言うと、次のように使用する必要があります (xyz() が展開メソッドであると仮定します):

$(' selector').xyz( );

呼び出しメソッドは次のとおりです:

<!DOCTYPE html>
<html>
<head>
    <title>jQuery.extend()与jQuery.fn.extend()区别</title>
    <meta charset="utf-8">
    <script type="text/javascript" src="jquery-1.7.1.js"></script>
    <script type="text/javascript">
        (function($){
               $.fn.extend({
                   speak:function(){
                       alert("how are you!");
                   }
               });
        })(jQuery);    </script>
    <script type="text/javascript">
        $(document).ready(function(){
            $("p").speak();
        })    </script>
</head>
<body>
 
</body>
</html>

4. の違いの概要2 つ:

4.1. 2 つの呼び出しメソッドは異なります:

       jQuery.extend(),一般由传入的全局函数来调用,主要是用来拓展个全局函数,如$.init(),$.ajax();

       jQuery.fn.extend(),一般由具体的实例对象来调用,可以用来拓展个选择器,例如$.fn.each();

4.2、两者的主要功能作用不同:

        jQuery.extend(object); 为扩展jQuery类本身,为自身添加新的方法。

        jQuery.fn.extend(object);给jQuery对象添加方法

 4.3、大部分插件都是用jQuery.fn.extend()

 5、JQuery的extend扩展方法:

     5.1、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"}

     也就是说后面的参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值。

      5.2、省略dest参数
           上述的extend方法原型中的dest参数是可以省略的,如果省略了,则该方法就只能有一个src参数,而且是将该src合并到调用extend方法的对象中去,如:
   5.2.1、$.extend(src)
   该方法就是将src合并到jquery的全局对象中去,如:

  $.extend({
      hello:function(){alert('hello');}
  });

       就是将hello方法合并到jquery的全局对象中。

   5.2.2、$.fn.extend(src)
   该方法将src合并到jquery的实例对象中去,如:

  $.fn.extend({
         hello:function(){alert('hello');}
  });

       就是将hello方法合并到jquery的实例对象中。

   下面例举几个常用的扩展实例:

$.extend({net:{}});

         这是在jquery全局对象中扩展一个net命名空间。

$.extend($.net,{
       hello:function(){alert('hello');}
})

        这是将hello方法扩展到之前扩展的Jquery的net命名空间中去。

   5.2.3、Jquery的extend方法还有一个重载原型:

 extend(boolean,dest,src1,src2,src3...)

        第一个参数boolean代表是否进行深度拷贝,其余参数和前面介绍的一致,什么叫深层拷贝,我们看一个例子:

var result=$.extend( true, {}, 
    { name: "John", location: {city: "Boston",county:"USA"} }, 
    { last: "Resig", location: {state: "MA",county:"China"} } 
);

        我们可以看出src1中嵌套子对象location:{city:"Boston"},src2中也嵌套子对象location:{state:"MA"},第一个深度拷贝参数为true,那么合并后的结果就是: 

var result={
       name:"John",last:"Resig", location:{city:"Boston",state:"MA",county:"China"}
}

       也就是说它会将src中的嵌套子对象也进行合并,而如果第一个参数boolean为false,我们看看合并的结果是什么,如下

 var result=$.extend( false, {},        { name: "John", location:{city: "Boston",county:"USA"} },  
       { last: "Resig", location: {state: "MA",county:"China"}  });

        那么合并后的结果就是:

var result={
      name:"John",last:"Resig",location:{state:"MA",county:"China"}
}

以上就是$.extend()在项目中经常会使用到的一些细节。

更多编程相关知识,请访问:编程视频课程!!

以上がjQueryのextend()とjQuery.fn.extend()の違いを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。