上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
12
返回列表 发新帖
楼主: bigonion - 

ts对象中的箭头函数this指向哪里?

[复制链接]
  • TA的每日心情
    无聊
    2023-11-2 17:37
  • 签到天数: 275 天

    [LV.8]以坛为家I

    114

    主题

    453

    回帖

    974

    积分

    荣誉开发者

    积分
    974

    荣誉开发者油中2周年卓越贡献生态建设者油中3周年

    发表于 2023-2-3 19:30:17 | 显示全部楼层
    王一之 发表于 2023-2-3 09:36
    也是一个办法,但是有时候遇到了,还是得知道为什么,不然迷茫好久

    但是说实话学的越多,我越对this说不清,但是就是知道什么时候该用
    接脚本定制
    I frequently record, because want to leave something.
    回复
    订阅

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    864

    回帖

    1362

    积分

    荣誉开发者

    积分
    1362

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-2-3 23:29:53 | 显示全部楼层
    把this理解成局部变量就好了,function默认声明一个this(具体指向谁看函数所属),箭头函数不声明,因此this会往上追溯:
    1. String.prototype.test = function() {
    2.     console.log(this);
    3.     const that = this;
    4.     const fn = () => () => () => {
    5.         console.log(this === that);
    6.     };
    7.     fn()()();
    8. };
    9. 'abc'.test();
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

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

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

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    864

    回帖

    1362

    积分

    荣誉开发者

    积分
    1362

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-2-4 23:03:38 | 显示全部楼层
    bigonion 发表于 2023-2-4 01:27
    很怪,感觉总结不出大规律

    这么写总能理解了吧:
    1. String.prototype.test = function() {
    2.     const that = 'abc';
    3.     const fn = () => () => () => {
    4.         console.log(that);
    5.     };
    6.     fn()()();
    7. };
    8. 'abc'.test();
    复制代码

    this就相当于一个特殊的局部变量,function定义了这个局部变量,而箭头函数没有,所以从function处继承了this的值。如果你奇怪的是这里this为什么是abc,因为String是一个类,test是原型上的方法,类的构造函数和原型方法内的this指向实例,这是约定。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    638

    主题

    5234

    回帖

    6105

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6105

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 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
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    12
    返回列表 发新帖

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表