https://juejin.im/post/5aa1eb056fb9a028b77a66fd
普通函数中的this
function test(name) {
console.log(name)
console.log(this)
}
test('Jerry') //调用函数, 这其实是简写
test.call(undefined, 'Tom')//完整写法
//此时严格模式下this 是undefined
//宽松模式下this 是window
普通函数手动指定this
const obj = {
name: 'Jerry',
greet: function() {
console.log(this.name)
}
}
obj.greet.call({name: 'Spike'}) //打出来的是 Spike
普通函数函数完整的调用方法是使用call方法
包括test.call(context, name)
和obj.greet.call(context,name)
这里的context就是函数调用时的上下文,也就是this
只不过这个this是可以通过call方法来修改的
构造函数稍微特殊一点
它的this直接指向new之后返回的对象
window.setTimeout()
和window.setInterval()
默认的是this是window对象。
箭头函数使用call 会自动忽略第一个参数
箭头函数总是匿名的, 并且不绑定自己的this, arguments, super, new.target
super 关键字, 父对象的引用
new.target 属性, 用来检测函数是否通过new 运算符调用
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions
箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,super或 new.target。这些函数表达式更适用于那些本来需要匿名函数的地方,并且它们不能用作构造函数。