简单说,this就是属性或方法“当前”所在的对象
。
Demo1(一般使用——this:定义时所在的对象(当前所在的对象)
)
var person = {
name: '张三',
describe: function () {
return '姓名:'+ this.name;
}
};
person.describe()
这里的this,是指describe函数所在的对象(即person)。
Demo2(方法嵌套返回——this:调用时所在的对象(当前所在的对象)
)
稍微改造下,如下代码:
var person = {
name: '张三',
describe: function () {
// 这里返回一个函数
return function(){
return '姓名:'+ this.name;
}
}
};
let desRes = person.describe();
desRes();
根据执行结果,可以看出,并没有把姓名打印出来。为什么呢?
原因就是:describe返回一个函数,这个函数是在全局环境下的,它所在的上下文就是window. this就是属性或方法当前所在的对象
,即describe返回的函数当前所在的对象是window.所以,结果什么也不会输出。
Demo3(箭头函数——this:定义时所在的对象*无论何种情况*,皆是定义时所在的对象
)
针对Demo2的情况,可以使用箭头函数来绑定this,它可以在函数返回时,就绑定正确的this.
var person = {
name: '张三',
describe: function () {
// 这里返回一个函数,使用箭头函数返回
return () => {
return '姓名:'+ this.name;
}
}
};
let desRes = person.describe();
desRes();
箭头函数:函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象
.