在ES5中函數內容的this指向和調用方法有關app
包括函數名()和匿名函數調用,this指向window函數
function getSum() { console.log(this) //window } getSum() (function() { console.log(this) //window })() var getSum=function() { console.log(this) //window } getSum()
對象.方法名(),this指向對象this
var objList = { name: 'methods', getSum: function() { console.log(this) //objList對象 } } objList.getSum()
new 構造函數名(),this指向構造函數spa
function Person() { console.log(this); //指向構造函數Person } var personOne = new Person();
利用call和apply來實現,this就是call和apply對應的第一個參數,若是不傳值或者第一個值爲null,undefined時this指向windowcode
function foo() { console.log(this); } foo.apply('我是apply改變的this值');//我是apply改變的this值 foo.call('我是call改變的this值');//我是call改變的this值
箭頭函數不能夠看成構造函數使用,也就是不能用new命令實例化一個對象,不然會拋出一個錯誤
箭頭函數的this是和定義時有關和調用無關
調用就是函數調用模式對象