call()、apply()、bind()總結

1、call()
調用這個函數並修改函數運行時的this指向。

fun.call(thisArg,arg1,arg2,,,)

參數:thisArg:當前調用函數this的指向對象;

            arg1,arg2:傳遞的其它參數

 

注意:是更改 fun函數內部的 this 指向 thisArg函數,此時 fun函數 內部的this相當於 thisArg函數內部的this。

例子:

//1 父構造函數
function Father(uname,age){
    //this 指向父構造函數的對象實例
    this.uname=uname;
    this.age=age;
}
//2 子構造函數
function Son(name,age,score){
    //this 指向子構造函數的對象實例
    Father.call(this,name,age);
    //上面一句相當於增加了下面兩句:
    //this.name=name;
    //this.age=age;
    this.score=score;
}
var son=new Son('小明',21,99);

打印 son:


2、apply()方法
和call方法相似,調用一個函數,可以改變函數的this指向。

fun.apply(thisArg,[argsArray])

參數:thisArg:在fun函數運行時指定的this值;

           argsArray:傳遞的值,包含在數組裏面;

返回值就是函數的返回值,因爲它就是調用函數。

apply的主要應用:

如 :利用apply 藉助數學內置對象求最大值(最小值):

var arr=[1,44,3,66,9]; 
Math.max.apply(Math,arr); //指回Math 
Math.min.apply(Math,arr);

3、bind()方法

不會調用方法,但會改變函數內部 this 指向。

fun.blind(thisArg,arg1,arg2,...)

參數:thisArg:在fun函數運行時指定的this 值;

            arg1,arg2:傳遞的其他參數;

返回由指定的this值和初始化參數改造的原函數拷貝。(返回一個函數)

應用:如果有的函數不想立即調用,但又想改變函數內部的this指向,此時用 bind。

 

總結:

相同點:都可以改變函數內部this指向;

區別:

1)call和apply會調用函數,並改變函數內部this指向;

2)call和apply傳遞的參數不一樣,call傳遞arg1,arg2...形式,apply傳參必須數組形式;

3)bind不會調用函數,可以改變函數內部this指向。

主要應用場景:

1)call經常用於繼承;

2)apply經常與數組有關,比如藉助Math對象求數組的最大最小值;

3)bind應用比如改變定時器內部的this指向。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章