js學習總結----call和apply和bind的區別

來源:互聯網
上載者:User

標籤:ict   而且   use   賦值   實現   call   編寫   class   call()   

apply和call的方法是一模一樣的,都是用來改變方法的this關鍵字,並且把方法執行:而且在strict 模式和非strict 模式下對於第一個參數是null/undefined這種情況的規律是一樣的;

bind:這個方法在IE6-8下不相容 ->和call和apply類似都是用來改變this關鍵字的

‘use strict‘ //告訴當前瀏覽器接下來的js代碼將按照strict 模式進行編寫        var obj = {name:‘張三‘}        function fn(num1,num2){            console.log(num1+num2);            console.log(this)        }        fn(100,200);//this ->window num1=100 num2=200        fn.call(100,200);// this->100 num1 = 200 num2=undefined  NaN        fn.call(obj,100,200)//this->obj  call在給fn傳遞參數的時候,是一個個傳遞值的,而apply不是一個個傳,而是把要傳遞的參數值放在一個數組中進行操作。但是也相當於一個個的給fn的形參賦值        fn.apply(obj,[100,200]);//        //預先處理:事先把fn的this改變為我們想要的結果,並且把對應的參數值也準備好,以後要用到了,直接的執行即可。bind這裡實現了預先處理的效果        var tempFn = fn.bind(obj,100,200);//只是改變了fn中的this為obj,並且給fn傳遞了兩個參數值100和200,但此時並沒有把fn這個函數執行,執行bind會有一個傳回值,這個傳回值tempFn就是我們把fn的this改變後的那個結果        tempFn();        fn.call();//this->window  在strict 模式下this->undefined        fn.call(null);//this->window 在strict 模式下this->null        fn.call(undefined)//this->window 在strict 模式下this->undefined

js學習總結----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.