C 語言支援獨立的函式是沒有 this 的C++ 是支援獨立的函式的但 this 只能出現在 class 方法裡Java 不支援獨立的函式因此 this 只能出現在 class 方法裡PHP 支援獨立的函式但 $this 只能出現在 class 方法裡Python 支援獨立的函式但是 self 只能出現在 class 方法裡
JavaScript 中的 this 指向問題
JavaScript 語言中 this 被允許出現在獨立函數里
每個函式都有一個隱式的 this 形參。將函式作為方法呼叫時,這個引數會被設定為用於訪問該方法的物件。這和大多數面嚮物件語言中的 this(或 self)含義相同
但是 JavaScript 在「關聯到物件的方法」與「獨立函式」這兩者之間,使用了單一的定義形式。這使 this 導致了許多程式設計師的困惑和 bug
ES6 中的箭頭函式
箭頭函式基本形式
let func = (num) => num;let func = () => num;let sum = (num1,num2) => num1 + num2;[1,2,3].map(x => x * x);
箭頭函式基本特點:
(1). 箭頭函式 this 為父作用域的this,不是呼叫時的 this(2). 箭頭函式透過call和apply呼叫,不會改變this指向,只會傳入引數(3). 箭頭函式沒有原型屬性(4). 箭頭函式在ES6 class中宣告的方法為例項方法,不是原型方法
其他語言中的 this
C 語言支援獨立的函式是沒有 this 的C++ 是支援獨立的函式的但 this 只能出現在 class 方法裡Java 不支援獨立的函式因此 this 只能出現在 class 方法裡PHP 支援獨立的函式但 $this 只能出現在 class 方法裡Python 支援獨立的函式但是 self 只能出現在 class 方法裡
JavaScript 中的 this 指向問題JavaScript 語言中 this 被允許出現在獨立函數里
每個函式都有一個隱式的 this 形參。將函式作為方法呼叫時,這個引數會被設定為用於訪問該方法的物件。這和大多數面嚮物件語言中的 this(或 self)含義相同
但是 JavaScript 在「關聯到物件的方法」與「獨立函式」這兩者之間,使用了單一的定義形式。這使 this 導致了許多程式設計師的困惑和 bug
ES6 中的箭頭函式箭頭函式基本形式
let func = (num) => num;let func = () => num;let sum = (num1,num2) => num1 + num2;[1,2,3].map(x => x * x);
箭頭函式基本特點:
(1). 箭頭函式 this 為父作用域的this,不是呼叫時的 this(2). 箭頭函式透過call和apply呼叫,不會改變this指向,只會傳入引數(3). 箭頭函式沒有原型屬性(4). 箭頭函式在ES6 class中宣告的方法為例項方法,不是原型方法
JavaScript 小歷史1995 年 Netscape 在實現最早的 JavaScript 時,其內部的需求是這樣的:……這種 Java 的輔助語言必須「看起來像 Java」,保持易用性並「基於物件」,而不是像 Java 這樣基於類。
……所有人都認可 Mocha(最早的 JS 引擎)將會「基於物件」但沒有類。因為支援類將花費很長時間,並有與 Java 競爭的風險。
但是在 ES6 中你知道的已經做出了相關的調整和改進