我總結的call()與apply()方法的區別

【call()與apply()的區別】
在ECMAScript中每個函數都是function類型(是javascript的基本引用類型)的實例,具備必定的屬性和方法。call()和apply()則是這個function類型的實例的方法。每一個函數都包含這兩個非繼承而來的方法。這兩個方法的用途都是在特定的做用域中調用函數,實際上等於設置函數體內this對象的值。(用於傳遞參數)

區別:
apply()方法:接受兩個參數,一個是在其中運行函數的做用域,另外一個是參數數組(能夠是Array的實例,也能夠是arguments對象)。
語法:apply(thisObj,[argArray])
定義:應用某一對象的一個方法,用另外一個對象替換當前對象。 javascript

<!DOCTYPE html>
 <html>
 <head>
    <meta charset="utf-8">
     <title>apply()例子</title>
     <script type="text/javascript">
         function sum(num1,num2){ return num1 + num2; } function callsum1(num1,num2){ return sum.apply(this,[num1,num2]);//傳入數組
 } function callsum2(num1,num2){ return sum.apply(this,arguments);//傳入arguments對象
 } alert(callsum1(10,10)); alert(callsum2(10,10)); </script>
 </head>
 <body>
 
 </body>
 </html>

call()方法:他與apply()方法的區別僅在與接收參數的方式不一樣。對於call()方法而言,第一個參數是this值沒有變化變化的是其他參數都直接傳遞個函數。換句話說就是在使用call()方法時,傳遞給函數的參數必須逐個例舉出來。
語法:call(thisObj,Object)
定義:調用一個對象的一個方法,以另外一個對象替換當前對象。html

<!DOCTYPE html>
 <html>
 <head>
    <meta charset="utf-8">
     <title>call()例子</title>
     <script type="text/javascript">
         function sum(num1,num2){ return num1 + num2; } function callsum(num1,num2){ return sum.call(this, num1, num2); } alert(callsum(10,10)); </script>
 </head>
 <body>

 </body>
 </html>

事實上,傳遞參數並不是apply()和call()的用武之地,他們真正強大的地方是可以擴充函數賴以運行的做用域。這樣的好處在於對象和方法不須要有任何耦合關係。這個在《javascript高級程序設計》-第三版書中117-118頁有詳細介紹。java

相關文章
相關標籤/搜索