箭頭函數
箭頭函數是ES6的新特性,簡化了函數的寫法
普通函數
this指向調用者
具有prototype
this指向可以被call/apply/bind改變
普通函數的this在運行時創建,箭頭函數的this是聲明時確定
匿名函數
表現為function后面不帶名字的函數,但是可以用一個變量接收,通過執行這個變量來執行這個函數
this指向window
具有prototype
this指向可以被call/apply/bind改變
箭頭函數
1 沒有原型prototype
2 因為沒有原型,因此沒有super用於訪問原型屬性
3 沒有arguments,如果有一定是父級作用域的arguments
4 箭頭函數自身沒有this,它的this來源於作用域鏈(作用域相對於函數,原型相對於對象),this指向依然是父級作用域的this指向。普通函數的this在運行時創建,箭頭函數的this是聲明時確定
5 箭頭函數是匿名函數,所謂匿名函數,就是function后面不帶名字的函數,但是可以用一個變量接收,通過執行變量來執行這個函數
6 箭頭函數中this指向無法被修改,如bind、call、apply
7 因為無法修改this指向,因此不能作為構造函數使用(構造函數的this永遠指向由它實例化出來的對象,箭頭函數無法對創建出來的實例進行this綁定),它和new關鍵字一起使用時會拋出異常
8 因為無法作為構造函數,因此不能使用new.target關鍵字返回創建實例的構造函數(類)本身
new.target的使用
//new.target 用於方法內
//當方法作為構造時,返回創建該實例的構造函數
//當方法不作為構造函數時,返回undefined
//可用於判斷是否使用new 關鍵字創造了實例
function Animal(){
console.log(new.target)
}
Animal()// undefined
new Animal();// Animal