V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
chenpingan
V2EX  ›  JavaScript

JS 关于 this 指向的疑惑

  •  
  •   chenpingan · 2020-10-23 16:23:44 +08:00 · 926 次点击
    这是一个创建于 610 天前的主题,其中的信息可能已经有所发展或是发生改变。

    //代码 var name = '行星飞行'; let obj = { name: '听风是风', fn: function () { console.log(this.name); } };

    function fn1(param) { param(); }; fn1(obj.fn);

    这个例子中我们将 obj.fn 也就是一个函数传递进 fn1 中执行,这里只是单纯传递了一个函数而已,this 并没有跟函数绑在一起,所以 this 丢失这里指向了 window 。

    上述是一篇文章中讲述的,我有点没搞清楚“this 并没有跟函数绑在一起,所以 this 丢失这里指向了 window”这句话到底表述了什么意思...

    3 条回复    2020-11-05 10:43:04 +08:00
    Exceptionluo
        1
    Exceptionluo  
       2020-10-23 17:35:19 +08:00
    var name = "行星飞行";
    let obj = {
    name: "听风是风",
    fn: function () {
    console.log(this.name);
    //哪个对象调用该方法,this 即指向该对象
    },
    };

    function fn1(fn) {
    /*
    这里的 fn 只是个方法,同 function () {
    console.log(this.name);
    }
    该方法已经和 obj 对象没有关系了,所以最终的 this 就指向了兜底对象 window 对象,里面的 this 就是 window

    虽然 fn 在 fun1 里执行,但是 fn 不属于 fn1,这里只是借用的关系
    */
    fn();
    }
    fn1(obj.fn);
    chenpingan
        2
    chenpingan  
    OP
       2020-10-23 17:52:53 +08:00
    @Exceptionluo 我有点理解了,谢谢你
    rzWack
        3
    rzWack  
       2020-11-05 10:43:04 +08:00 via Android
    总结楼上:this 指向最后一次调用的对象。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2470 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:37 · PVG 15:37 · LAX 00:37 · JFK 03:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.