在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是和定义时有关和调用无关
调用就是函数调用模式对象