
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
箭头函数是ES6里一个重要的特性,小编让烟台it培训的老师给大家讲一下箭头函数中的this绑定。
箭头函数的this是根据外层的(函数或者全局)作用域来决定的。函数体内的this对象指的是定义时所在的对象,而不是之前介绍的调用时绑定的对象。举一个例子
var a = 1
var foo = () => {
console.log(this.a) // 定义在全局对象中,因此this绑定在全局作用域
}
var obj = {
a: 2
}
foo() // 1 ,在全局对象中调用
foo.call(obj) // 1,显示绑定,由obj对象来调用,但根本不影响结果
从上面这个例子看出,箭头函数的 this 强制性的绑定在了箭头函数定义时所在的作用域,而且无法通过显示绑定,如apply,call方法来修改。在来看下面这个例子
// 定义一个构造函数
function Person(name,age) {
this.name = name
this.age = age
this.speak = function (){
console.log(this.name)
// 普通函数(非箭头函数),this绑定在调用时的作用域
}
this.bornYear = () => {
// 本文写于2016年,因此new Date().getFullYear()得到的是2016
// 箭头函数,this绑定在实例内部
console.log(new Date().getFullYear() - this.age)
}
}
}
var zxt = new Person("zxt",22)
zxt.speak() // "zxt"
zxt.bornYear() // 1994
// 到这里应该大家应该都没什么问题
var xiaoMing = {
name: "xiaoming",
age: 18 // 小明永远18岁
}
zxt.speak.call(xiaoMing)
// "xiaoming" this绑定的是xiaoMing这个对象
zxt.bornYear.call(xiaoMing)
// 1994 而不是 1998,这是因为this永远绑定的是zxt这个实例
因此 ES6 的箭头函数并不会使用四条标准的绑定规则,而是根据当前的词法作用域来决定this ,具体来说就是,箭头函数会继承外层函数调用的this绑定 ,而无论外层函数的this绑定到哪里。
如果你还有什么疑问,就来烟台it培训班咨询吧。