箭頭函數與普通函數不同
1:箭頭函數不能使用new
2:箭頭函數不能使用arguments,使用 rest參數 …
var a = (...A)=>{
console.log(A)
}
3:箭頭函數指向
先看一個栗子
var obj = {
a:10,
b()=>{
console.log(this.a); //underfined
console.log(this); //widow
},
c:function(){
console.log(this.a); //10
console.log(this);//obj
}
}
在我的理解裏面 箭頭函數指向爲同級,普通方式的上一級
實際上:箭頭函數不定義this
4:沒有原型屬性
5:不能使用generator 和 yield
ps:終於理解 this在箭頭函數中指向上下文,而在普通函數中誰調用指向誰。
1.箭頭函數的this綁定看的是this所在的函數定義在哪個對象下,綁定到哪個對象則this就指向哪個對象
2.如果有對象嵌套的情況,則this綁定到最近的一層對象上
題外:
如何想獲得傳入的參數
var a = function(1,…,50){};
可以通過arguments獲得
構造函數:
函數創建有兩種方式:
var a = function(){};
function A (){};
var as = new A();
第二種可以通過new 創見一個新的函數;
使用內部的字符串函數創建一個字符串對象
下面幾個例題吧[:https://blog.csdn.net/u013344815/article/details/73184928/]
var obj = {
fn:function(){
console.log(this); //指向obj,這個函數本身
}
}
var obj = {
fn:function(){
setTimeout(function(){
console.log(this); //window
})
}
}
this指向最外層window,this出現在setTimeout()中沒有被調用
如果這裏使用箭頭函數又指向了obj本身。
var obj1 = {
num:3,
fn:function(){
setTimeout(function(){
console.log(this.num); //undefined
})
}
}
var obj1 = {
num:4,
fn:function(){
setTimeout(()=>{
console.log(this.num); //4;
})
}
}
在沒有箭頭函數的情況下,this指向window,在使用箭頭函數的情況下,this指向obj
var obj1={
num:4,
fn:function(){
var f=() => { //object,也就是指obj1
console.log(this);
setTimeout(() => {
console.log(this);// //object,也就是指obj1
});
}
f();
}
}
var obj1={
num:4,
fn:function(){
var f=function(){
console.log(this); //window,因爲函數f定義後並沒有對象調用,this直接綁定到最外層的window對象
setTimeout(() => {
console.log(this);//window,外層this綁定到了window,內層也相當於定義在window層(全局環境)
});
}
f();
}
}
改變f箭頭函數之後this指向window,因爲沒有定義
var obj1={
num:4,
fn:function(){
var f=() => {
console.log(this); //object,f()定義在obj1對象中,this就指向obj1,這就是箭頭函數this指向的關鍵
setTimeout(function() {
console.log(this);//window,非箭頭函數的情況下還是要看宿主對象是誰,如果沒有被對象調用,函數體中的this就綁定的window上
});
}
f();
}
}