箭頭函數和普通函數的區別


  1. 箭頭函數的this值在聲明時就確認了,普通函數的this值,在調用的時候確認

  2. call、apply、bind不會改變箭頭函數this值,會改變普通函數this值

  3. 箭頭函數不能作為構造函數使用,不能使用new

  4. 箭頭函數沒有原型屬性

  5. 箭頭函數不綁定arguments,取而代之用rest參數... 解決

  6. 箭頭函數不能當做Generator函數,不能使用yield關鍵字

為什么箭頭函數不能構造實例對象

// 構造函數生成實例的過程
function Person(name,age){
	this.name = name
  this.age = age
}
var p = new Person('張三',18)

//new關鍵字生成實例過程如下
// 1. 創建空對象p
var p = {} 
// 2. 將空對象p的原型鏈指向構造器Person的原型
p.__proto__ = Person.prototype
// 3. 將Person()函數中的this指向p
// 若此處Person為箭頭函數,而沒有自己的this,call()函數無法改變箭頭函數的指向,也就無法指向p。
Person.call(p) 

構造函數是通過 new 關鍵字來生成對象實例,生成對象實例的過程也是通過構造函數給實例綁定 this 的過程,而箭頭函數沒有自己的 this。因此不能使用箭頭作為構造函數,也就不能通過 new 操作符來調用箭頭函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM