call和apply和bind的區別

來源:互聯網
上載者:User

標籤:參數   pre   blog   結合   傳參   size   apply()   log   null   

在 javascript 中,call 和 apply 都是為了改變某個函數運行時的上下文(context)而存在的,換句話說,就是為了改變函數體內部 this 的指向。

JavaScript 的一大特點是,函數存在「定義時上下文」和「運行時上下文」以及「上下文是可以改變的」。

  apply(): 將函數作為指定對象的方法來調用,傳遞給它的是指定的參數數組
function.apply(thisobj, args) 或者 function.apply(thisobj, args)

1、thisobj是調用function的對象,函數體內thisobj為this,如果參數為null則使用全域對象
2、返回調用函數function的傳回值

bind(): 主要作用:將函數綁定到一個對象,返回一個新函數,通過可選的指定參數,作為指定對象的方法調用該方法 文法 fun.bind(thisArg[, arg1[, arg2[, ...]]])
function.bind(A) 或者是function.bind(A, args...);

1、A要綁定在函數上的對象
2、args...要綁定在函數上的零個或者是多個函數值
3、返回一個新函數,該函數會當做A的方法調用,並向它傳入args參數

bind是ES5新增的一個方法
傳參和call或apply類似
不會執行對應的函數,call或apply會自動執行對應的函數
返回對函數的引用

call(): 類似apply,將函數作為指定對象的方法來調用,傳遞給它的是指定參數
function.call(thisobj, args.....)

1、thisobj是調用function的對象,函數體內thisobj為this,如果參數為null則使用全域對象
2、返回調用函數function的傳回值

apply與call的區別:

    <script>            function print(a,b,c,d){                alert(a + b + c + d);            }                    function example(a,b,c,d){                //當參數很明確,一般使用call                print.call(this,a,b,c,d);                            //封裝成數組                print.apply(this,[a,b,c,d])                            //javascript方法本身有的arguments數組,當參數不明確的時候可以用apply結合arguments                print.apply(this,arguments)            }                    example("心","想","事","成")             </script>
var func = function(arg1, arg2) {     };就可以通過如下方式來調用:func.call(this, arg1, arg2);func.apply(this, [arg1, arg2])

三者區別demo:

<script type="text/javascript">            var obj = {                num: 888,            };            var foo = {                getNum: function() {                    return this.num;                }            }            console.log(foo.getNum.bind(obj)()); //888            console.log(foo.getNum.call(obj)); //888            console.log(foo.getNum.apply(obj)); //888            //apply 、 call 、bind 三者都是用來改變函數的this對象的指向的;            //apply 、 call 、bind 三者第一個參數都是this要指向的對象,也就是想指定的上下文;            //apply 、 call 、bind 三者都可以利用後續參數傳參;            //bind 是返回對應函數,便於稍後調用;apply 、call 則是立即調用 。        </script>

 

call和apply和bind的區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.