this有个原则,就是谁调用就指向谁。
一、全局环境:
全局环境就是在里面,指向的是window对象。
(怎么可以不举几个栗子呢)
栗子1:
var name = 'Jenny';
function person() {
return this.name;
}
console.log(this.name); // Jenny
console.log(window.name); // Jenny
console.log(person()); // ③ // Jenny
// 这段代码里的两个this都是指向window。
// 因为name属于全局变量,全局变量属于window,所以this.name就是window.name
// 第三句当我要去输出person(),就全局寻找person(),window.person,即this.person(),
// return this.name就输出this.window.name
二、局部环境:
栗子2:
var name = 'Jenny';
function person() {
console.log(this.name);
}
var obj = {
name : 'Tom',
person: function() {
console.log(this.name);
}
}
person(); // Jenny
obj.person(); // Tom
// 这段代码最后两次调用person,第一个调用person是全局的person,所以跟栗子1一样的原理
// 调用obj的person的时候,对象obj先寻找自己的person方法,在person方法里,打印this.name。
// 因为这个person方法是被obj调用的,所以,this是指obj,就寻找obj内部的name,打印结果是Tom
如果此刻你的表情是这样的
那我也就成功了
——————————————————华丽的分隔线————————————————————
栗子3:构造函数内使用this
function Person(name) {
this.name = name;
return name;
}
console.log(new Person('jack').name); // jack
// new Person('jack')时生成一个实例(比如叫person,他的name叫jack),person调用name,即jack
栗子4:使用apply和call函数改变this的指向
function person() {
return this.name;
}
var obj = {
name : 'jack'
}
console.log(person.call(obj)); // jack
console.log(person.apply(obj)); // jack
// 需要把this指向谁就把谁写在参数第一个位置
转载:https://blog.csdn.net/qq_40686529/article/details/102567783
查看评论