this的屬性 箭頭函數

在全局執行,要看他的this是什麼bash

箭頭函數中的 this 是上級做用域中的 this this 函數的執行主體 1. 事件綁定中的this 都是 當前操做的元素; 2. 自執行函數中的this 是 window 3. 通常函數執行時,內部this指向 看點,點前邊是誰 this就是誰;閉包

箭頭函數中的this 它和普通函數最不同的一點就是 this 的指向了,做爲對象的方法調)咱們使用閉包來解決 this 的指向問題嗎,若是用上了箭頭函數就能夠更完美的解決了:函數

var obj = {
  name: 'qiutc',
  foo: function() {
    console.log(this);
  },
  foo2: function() {
    console.log(this);
    setTimeout(() => {
      console.log(this);  // Object {name: "qiutc"}
    }, 1000);
  }
}
obj.foo2();
複製代碼

能夠看到,在 setTimeout 執行的函數中,本應該打印出在 Window,可是在這裏 this 卻指向了 obj,緣由就在於,給 setTimeout 傳入的函數(參數)是一個箭頭函數:ui

函數體內的this對象,就是定義時所在的對象,而不是使用時所在的對象。this

根據例子咱們理解一下這句話:spa

obj.foo2() 執行的時候,當前的 this 指向 obj;在執行 setTimeout 時候,咱們先是定義了一個匿名的箭頭函數,關鍵點就在這,箭頭函數內的 this 執行定義時所在的對象,就是指向定義這個箭頭函數時做用域內的 this,也就是 obj.foo2 中的 this,即 obj;因此在執行箭頭函數的時候,它的 this -> obj.foo2 中的 this -> objcode

簡單來講, 箭頭函數中的 this 只和定義它時候的做用域的 this 有關,而與在哪裏以及如何調用它無關,同時它的 this 指向是不可改變的對象

爲一個普通函數指定 this事件

var obj = {
  name: 'qiutc'
};
function foo() {
  console.log(this);
}
foo.call(obj);
// Object {name: "qiutc"}
複製代碼

能夠看到,在執行 foo.call(obj) 的時候,函數內的 this 指向了 obj 這個對象,成功;作用域

相關文章
相關標籤/搜索