thinking

          one platform thousands thinking

          關于JavaScript中apply與call的用法意義及區(qū)別(轉)

          關于JavaScript中apply與call的用法意義及區(qū)別(轉)

          JavaScript中有一個call和apply方法,其作用基本相同,但也有略微的區(qū)別。

          先來看看JS手冊中對call的解釋:

          call 方法
          調用一個對象的一個方法,以另一個對象替換當前對象。

          call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

          參數(shù)
          thisObj
          可選項。將被用作當前對象的對象。

          arg1, arg2,  , argN
          可選項。將被傳遞方法參數(shù)序列。

          說明
          call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數(shù)的對象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對象。

          如果沒有提供 thisObj 參數(shù),那么 Global 對象被用作 thisObj。

          說明白一點其實就是更改對象的內部指針,即改變對象的this指向的內容。這在面向對象的js編程過程中有時是很有用的。

          引用網(wǎng)上一個代碼段,運行后自然就明白其道理。

          <input type="text" id="myText"   value="input text">
          <script>
              
          function Obj(){this.value="對象!";}
              
          var value="global 變量";
              
          function Fun1(){alert(this.value);}

              window.Fun1();   
          //global 變量
              Fun1.call(window);  //global 變量
              Fun1.call(document.getElementById('myText'));  //input text
              Fun1.call(new Obj());   //對象!
          </script>

          call函數(shù)和apply方法的第一個參數(shù)都是要傳入給當前對象的對象,及函數(shù)內部的this。后面的參數(shù)都是傳遞給當前對象的參數(shù)。
          運行如下代碼:
          <script>
             
          var func=new function(){this.a="func"}
              
          var myfunc=function(x){
                  
          var a="myfunc";
                  alert(
          this.a);
                  alert(x);
              }
              myfunc.call(func,
          "var");
          </script>

          可見分別彈出了func和var。到這里就對call的每個參數(shù)的意義有所了解了。

          對于apply和call兩者在作用上是相同的,但兩者在參數(shù)上有區(qū)別的。
          對于第一個參數(shù)意義都一樣,但對第二個參數(shù):
          apply傳入的是一個參數(shù)數(shù)組,也就是將多個參數(shù)組合成為一個數(shù)組傳入,而call則作為call的參數(shù)傳入(從第二個參數(shù)開始)。

          如 func.call(func1,var1,var2,var3)對應的apply寫法為:func.apply(func1,[var1,var2,var3])

          同時使用apply的好處是可以直接將當前函數(shù)的arguments對象作為apply的第二個參數(shù)傳入

          posted on 2011-04-11 10:27 lau 閱讀(364) 評論(0)  編輯  收藏 所屬分類: Web

          主站蜘蛛池模板: 进贤县| 普洱| 都江堰市| 天峻县| 河池市| 石泉县| 海丰县| 大宁县| 东丽区| 武乡县| 平舆县| 马山县| 同江市| 赤峰市| 扎鲁特旗| 桃园市| 玉田县| 赤城县| 旬阳县| 横峰县| 晋江市| 洛隆县| 行唐县| 宝坻区| 徐水县| 白城市| 广宁县| 贺兰县| 滦平县| 绥滨县| 信丰县| 赫章县| 建水县| 图木舒克市| 安丘市| 民县| 滁州市| 溧水县| 昌图县| 河津市| 平凉市|