前言
this在不同区域的指向问题
提示:以下是本篇文章正文内容,下面案例可供参考
一、this的定义
只有函数在调用的时候this指向才确定,不调用的时候不知道指向谁 实际上this的最终指向的是那个调用它的对象
二、不同的区域下this的指向
1.全局
代码如下(示例):
var a = 1;
console.log(this.a);//this指向window
2.一般函数
代码如下(示例):
function dom1() {
var a;
a = 2
console.log('具名函数' + this.a);
}
dom1();
//输出a为1 相当于window.dom1()是window调用的【区别为严格和非严格 不过最后都是window调用】
小测试
var a = 1;
function dom1() {
var a;
a = 2
console.log('具名函数' + this.a);
}
new dom1();//?
解析:只要new了,相当于
function dom1() {
var this={}
var a;
a = 2
console.log(‘具名函数’ + this.a);
return this;
}
this.a这个a属性没有赋值 输出为//underfind
3.嵌套函数
var name = 1;
var obj = {
name: 'wang',
friends: ['zhang', 'li'],
loop: function() {
this.friends.forEach(
function(friend) {
console.log(this.name + ' knows ' + friend);
}
);
}
};
obj.loop();//输出1 指向windows
//好像是foreach缘故
参考:https://blog.csdn.net/qq_34629352/article/details/104861397
如何重定向this让其重新指向外部
var obj = {
name: 'wang',
friends: [ 'zhang', 'li' ],
loop: function () {
'use strict';
var that = this ;//这个this指这个对象
this.friends.forEach(
function (friend) {
console.log(that.name+' knows '+friend);
}
);
}
};
obj.loop();//this指向改变,成功获取了外部数据
引用链接
https://www.cnblogs.com/webwangjie/p/14760394.html
es6 箭头函数this指向 /箭头函数里面没有this 他会在函数作用域往上拿this
function aa(name) {
this.name = name;
this.age = 0;
this.say = {
num1: () => {
console.log(this);
},
num2: function() {
console.log('分割')
console.log(this);
}
}
}
var p = new aa('tom');
p.say.num1(); //指向aa这个this
p.say.num2(); //指向say这个对象
function aa(name) {
this.name = name;
this.age = 0;
console.log(this);
this.say = () => {
this.age++;
console.log(this);
}
}
var p = new aa();//
p.say();
4.构造函数
function person1(name){
this.name=name;//构造函数this函数指向这个实例
}
var p=new person1('Lucy');
console.log(p.name);
总结
this的最终指向的是那个调用它的对象共勉
道阻且长,行则将至!学无止境呀