最近寫完小程序後, 開始學習React, 由於有編譯器, 就直接用ES6 新語法了,node
中間天然離不開 () => { console.log(‘箭頭函數的this是指向哪的問題’)};小程序
var obj2 = { id: 2333, test: () => console.log(this) } obj2.test();//window obj2.test.call(obj2);//window
那麼我要這裏 test函數的this 指向 obj2 是要怎麼作呢瀏覽器
來分析下上面代碼, 轉換成 ES5 寫法的this指向: app
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
其實還有一種寫法:this
function Obj(){ this.id = 2333; this.test = () => console.log(this); } var obj2 = new Obj();
**************************************************spa
總結: code
1. 箭頭函數的this不能用call()或者apply()進行綁定對象
2. 箭頭函數的 this
永遠指向該函數構造時的環境。
... 如今還沒再nodeJs環境中 用箭頭函數, 只知道 瀏覽器的頂級對象是 window, node環境是 global , 後面深刻學習node以後再總結..