call、apply、bind的用法和區別

call、apply、bind的作用

它們都是爲了改變方法內部this的指向。

call、apply怎麼區別?

  • callapply第一個參數均爲this的指向
  • call的其餘參數就是一個普通的參數列表。
  • apply除了第一個參數外,只接受一個數組類型的參數。

call的用法

var obj = {
			name: "zky",
		}

		function get(age,sex) {
		console.log("名字"+this.name+" 年齡"+age+" 性別"+sex)
		}
	get.call(obj,22,'男') //打印 名字zky 年齡22 性別男  此時的this通過call方法 指向了obj

apply的用法

var obj = {
			name: "zky",
		}

		function get(age,sex) {
		console.log("名字"+this.name+" 年齡"+age+" 性別"+sex)
		}
	get.apply(obj,[22,'男'])  //打印 名字zky 年齡22 性別男  此時的this通過call方法 指向了obj

bind與call和apply的區別

  • 第一個參數爲this的指向,其餘參數是一個普通的參數列表(這一點跟call很像) 返回的是一個函數,需要再調用一下
	var obj = {
			name: "朱康宇",
		}

		function get(age,sex) {
			console.log("名字"+this.name+" 年齡"+age+" 性別"+sex)
		}
		get.bind(obj,22,'男')()  //這裏注意 需要()去調用一下這個bind方法 因爲他返回的是一個函數
		//或者這樣寫(柯里化)
		get.bind(obj).bind(null,22).bind(null,'男')() //這裏的this指向依賴宇第一個bind中傳入的參數

這裏簡單說下柯里化是什麼意思

  • 柯里化(Currying),又稱部分求值(Partial Evaluation),是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,並且返回接受餘下的參數而且返回結果的新函數的技術。
  • 核心思想是把多參數傳入的函數拆成單參數(或部分)函數,內部再返回調用下一個單參數(或部分)函數,依次處理剩餘的參數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章