最近寫完小程序后, 開始學習React, 因為有編譯器, 就直接用ES6 新語法了,
中間自然離不開 () => { console.log(‘箭頭函數的this是指向哪的問題’)};
var obj2 = { id: 2333, test: () => console.log(this) } obj2.test();//window obj2.test.call(obj2);//window
那么我要這里 test函數的this 指向 obj2 是要怎么做呢
來分析下上面代碼, 轉換成 ES5 寫法的this指向:
var obj2 = {}; // window.obj2 = {}; obj2.id = 2333; // window.obj2 = { id: 2333; } var _this = this; obj2.test = function(){console.log(_this);}
用箭頭函數時, this是指向 最初定義變量時的this, 即 window.obj2 的 window
改一下, 變得很復雜了
var obj2 = { id: 2333, test: function(){ (()=>{ console.log(this) })() } } obj2.test();//obj2 obj2.test.call(obj2);//obj2
其實還有一種寫法:
function Obj(){ this.id = 2333; this.test = () => console.log(this); } var obj2 = new Obj();
**************************************************
總結:
1. 箭頭函數的this不能用call()或者apply()進行綁定
2. 箭頭函數的 this
永遠指向該函數構造時的環境。
... 現在還沒再nodeJs環境中 用箭頭函數, 只知道 瀏覽器的頂級對象是 window, node環境是 global , 后面深入學習node之后再總結..