wwwwwllllk 发表于 2023-2-3 19:30:17

王一之 发表于 2023-2-3 09:36
也是一个办法,但是有时候遇到了,还是得知道为什么,不然迷茫好久

但是说实话学的越多,我越对this说不清,但是就是知道什么时候该用

cxxjackie 发表于 2023-2-3 23:29:53

把this理解成局部变量就好了,function默认声明一个this(具体指向谁看函数所属),箭头函数不声明,因此this会往上追溯:
String.prototype.test = function() {
    console.log(this);
    const that = this;
    const fn = () => () => () => {
      console.log(this === that);
    };
    fn()()();
};
'abc'.test();

bigonion 发表于 2023-2-4 01:27:46

cxxjackie 发表于 2023-2-3 23:29
把this理解成局部变量就好了,function默认声明一个this(具体指向谁看函数所属),箭头函数不声明,因此th ...

很怪,感觉总结不出大规律

cxxjackie 发表于 2023-2-4 23:03:38

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指向实例,这是约定。

李恒道 发表于 2023-2-4 23:22:32

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]
查看完整版本: ts对象中的箭头函数this指向哪里?