這次帶給大家javascript中call與apply以及bind有哪些不同,javascript中call與apply以及bind使用的注意事項有哪些,以下就是實戰案例,一起來看一下。
首先補充嚴格模式這個概念,這是ES5中提出的,只要寫上:
“use strict”
就是告訴目前瀏覽器,接下來的JavaScript程式碼將按照嚴格模式進行編寫。
function fn() { console.log(this); }
fn.call(); // 普通模式下this是window,在嚴格模式下this是undefined
fn.call(null); //普通模式下this是window,在嚴格模式下this是null
fn.call(undefined); // 普通模式下this是window,在嚴格模式下this是undefined
#apply方法和call方法的作用是一模一樣的,都是用來改變方法的this關鍵字,並且把方法執行,而且在嚴格模式下和非嚴格模式下,對於第一個參數是null/undefined這種情況規律也是一樣的,只是傳遞函數的的參數的時候有差別。
function fn(num1, num2) { console.log(num1 + num2); console.log(this); }fn.call(obj , 100 , 200);fn.apply(obj , [100, 200]);123456
call在傳遞參數給fn的時候,是一個個的傳遞值的,而apply不是一個個傳的,而是把要給fn傳遞的參數值同一個的放在一個數組中進行操作,也相當於一個個的給fn的形參賦值。
bind方法和apply、call稍有不同,bind方法是事先把fn的this改變為我們要想要的結果,並且把對應的參數值準備好,以後要用到了,直接的執行即可,也就是說bind同樣可以改變this的指向,但和apply、call不同就是不會馬上的執行。
var tempFn = fn.bind(obj, 1, 2); tempFn();
第一行程式碼只是改變了fn中的this為obj,並且給fn傳遞了兩個參數值1、2,但是此時並沒有把fn這個函數給執行,執行bind會有一個回傳值,這個回傳值tempFn就是把fn的this改變後的那個結果。
注意:bind這個方法在IE6~8下不相容。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
#以上是javascript中call與apply以及bind有哪些不同的詳細內容。更多資訊請關注PHP中文網其他相關文章!