也是一个办法,但是有时候遇到了,还是得知道为什么,不然迷茫好久
但是说实话学的越多,我越对this说不清,但是就是知道什么时候该用 把this理解成局部变量就好了,function默认声明一个this(具体指向谁看函数所属),箭头函数不声明,因此this会往上追溯:
String.prototype.test = function() {
console.log(this);
const that = this;
const fn = () => () => () => {
console.log(this === that);
};
fn()()();
};
'abc'.test(); cxxjackie 发表于 2023-2-3 23:29
把this理解成局部变量就好了,function默认声明一个this(具体指向谁看函数所属),箭头函数不声明,因此th ...
很怪,感觉总结不出大规律
bigonion 发表于 2023-2-4 01:27
很怪,感觉总结不出大规律
这么写总能理解了吧:
String.prototype.test = function() {
const that = 'abc';
const fn = () => () => () => {
console.log(that);
};
fn()()();
};
'abc'.test();
this就相当于一个特殊的局部变量,function定义了这个局部变量,而箭头函数没有,所以从function处继承了this的值。如果你奇怪的是这里this为什么是abc,因为String是一个类,test是原型上的方法,类的构造函数和原型方法内的this指向实例,这是约定。 bigonion 发表于 2023-2-4 01:27
很怪,感觉总结不出大规律
还有一种理解思路
你声明了obj之后
obj.func()
实际obj是不具备任何作用域的
之所以func的this是obj
是因为obj.func等价于func.call(obj,args)
js实际只存在三种作用域
Global,Function,Block
Block不具备this
所以最后箭头取决于定义的作用域基本就是Global或Function
页:
1
[2]