高效總結call,apply,bind的異同

call、apply、bind的異同

  作用 執行時間 用法 共同點
call 調用其他對象的方法 立即執行 a.call(b,...arr)

Function對象自帶的方法,

可以改變this指向

apply a.apply(b,arr)
bind 創建一個綁定函數 回調執行 a.bind(b,args)()

 

 

 

 

 

下面通過一個簡單的實例來看三者的區別

name="window";
var a={
	name:"aa",
	fn:function(...a){
		var sum=0;
		a.map(v=>sum+=v);//累加
		console.log("name = "+this.name);
		console.log("sum = "+sum);
	}
}


var b={name:'bb'};
/* name = bb
	sum = 6*/
a.fn.call(b,1,2,3);
a.fn.apply(b,[1,2,3]);
a.fn.bind(b,1,2,3)();


/* name = window
	sum = 6*/
a.fn.call(null,1,2,3);
a.fn.apply(undefined,[1,2,3]);
a.fn.bind(this,1,2,3)();

 

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