JS函數與call()apply()詳解

來源:互聯網
上載者:User

標籤:style   blog   io   color   ar   os   使用   java   sp   

JavaScript中的每個函數都是一個對象。

  因為函數都是對象,它們有自己的屬性和方法。我們可以把它們看作資料(data)。

函數和方法的區別?
  函數立足於它們自己(例如:alert()),
  而方法是函數內部一個對象的屬性(dictionary),我們通過對象來調用方法。
  每個JavaScript函數都會有很多附屬的(attached)方法,包括toString()、call()以及apply()。


定義了一個全域函數f()。f()通過this關鍵字訪問變數x,

var x = 10;function f(){ alert(this.x);}f();
function p(){
var x=100;
alert(x);
}
p();

注意:我們不能通過一個對象的執行個體來調用這個函數。

  this指向的是什麼對象呢?this會指向這個全域對象。我們的變數x就是在這個全域對象中定義的。

  上面的代碼能夠正常運行,運行結果會顯示一個對話方塊,對話方塊中顯示10。 第二個函數 輸出100,函數內部屬性

js裡call函數改變對象指標,指向另一個對象調用

var x = 10;var o = { x : 15};function f(){ alert(this.x);}f();f.call(o);

 

  首先調用f()將會顯示10的對話方塊,因為this這個時候指向的是全域對象。

  然後我們調用f函數的call()方法,傳入的參數是o,運行結果顯示的是o中x屬性的值15。

  call()方法會用它的第一個參數作為f函數的this指標。也就是說,我們會告訴運行時,f函數中的this指向的是哪個對象。

call傳入參數

<script type="text/javascript">    var x = 10;var o = { x : 15};function f(y){ alert(this.x); this指O對象 alert(y);}f.call(o,this.x); this指全域對象屬性10    </script>
<script language="javascript"><!--       /**定義一個animal類*/      function Animal(){           this.name = "Animal";           this.showName = function(){               alert(this.name);           }       }       /**定義一個Cat類*/      function Cat(){           this.name = "Cat";       }             /**建立兩個類對象*/      var animal = new Animal();       var cat = new Cat();                 animal.showName.call(cat,",");
//通過call或apply方法,將原本屬於Animal對象的showName()方法交給當前對象cat來使用了。       //輸入結果為"Cat"   
</script>

call函數實現對象繼承

<script language="javascript"><!--  function Class1() {     this.showTxt = function(txt)     {         alert(txt);     } } function Class2() {         Class1.call(this); } var c2 = new Class2(); c2.showTxt("cc"); </script> 

c2對象可以具有了 Class對象的所有方法

apply()函數

  對於apply和call兩者在作用上是相同的,但兩者在參數上有區別的。 

  對於第一個參數意義都一樣,但對第二個參數: 
apply傳入的是一個參數數組,也就是將多個參數組合成為一個數組傳入,而call則作為call的參數傳入(從第二個參數開始)。 
  如 func.call(func1,var1,var2,var3)

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

 

JS函數與call()apply()詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.