apply() call() 和 bind() 的用法與區別

用法

  • 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相同,但是返回的是一個函數,需要加()再執行一次

 

 

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