關於javascript的bind,call,apply

bind

首先我們要知道bind 是什麼?他是基於一個現有函數,創建一個新函數,並永久綁定this。不但可以永久綁定this,還可以永久綁定部分參數。爲什麼要使用,因爲this總是發生變化。那我們什麼時候用這個函數呢,只要希望將一個對象永久綁定在一個函數內的this上 (這個函數中的this將永久無法被其他對象使用)。

call ,apply

call 改變this指向。而apply和call的作用的一樣的,但是在我們利用apply改變this指向時,可以和arguments搭配使用。那我們舉個例子:
function Person(){
this.name = arguments[0];
this.age = arguments[1];
}
Person();
Person.call();
var person = new Person(“wade”,25);
var obj = {}
person.call(obj);//讓Person中所有this的預設指向,都變成obj,並且可以再後續追加參數(需求:創建一個對象,有name、age、sex、tel)
function Student(name,age,sex,tel){
call借用別人的方法,完成自己的事情
call需要吧實參按照形參的個數傳進去
Person.call(this,name,age);this–>window
apply 需要闖一個arguments 裏面需要注意實參和新參的順序
Person.apply(this,[name,age]);
call和apply的作用是一樣的,只不過傳參方式不一樣
this.sex=sex;
this.tel = tel;
}

三者的區別

call 和apply:臨時借用一個函數,並替換this爲指定對象;不同之處,傳參的方式不一樣。立刻執行
bind:基於現有函數,創建一個新函數,並永久綁定this爲指定對象 可以綁定參數。–只創建函數,不執行。
三個選擇 :立刻執行—call/apply 不立刻執行–bind。

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