用法
- function.apply(obj,[...args]);
- function.call(obj,args,args,...);
- function.bind(obj,args,args,...)();
效果
執行function
將function中的this替換成obj再執行
傳遞參數爲obj後面的部分
function show(...args){
console.log(this.name,args);
}
var obj={
name:"AAA"
};
show.apply(obj,[1,2,3]);
show.call(obj,1,2,3);
show.bind(obj,1,2,3)();
輸出結果如下
如果執行的是構造函數,那麼實際上是繼承了構造函數的屬性與方法
function Father(){
this.name="James";
this.say=function(){
console.log("I am James");
}
}
var son={
sex:"boy"
};
Father.apply(son);
console.log(son);
輸出結果爲
區別
-
apply()只接受兩個參數,第一個爲替換this的對象,第二個爲記錄傳遞參數的數組
- call()接受N個參數,第一個爲替換this的對象,第二第三第三..都可以是傳遞的參數
- bind()接受的參數與call相同,但是返回的是一個函數,需要加()再執行一次