当前位置:  开发笔记 > 编程语言 > 正文

Javascript'这个'问题

如何解决《Javascript'这个'问题》经验,为你挑选了1个好方法。

当setTimeout调用它的匿名回调时,为什么'me'和'this'未定义?

    var gMyObj = new MyObj();
    gMyObj.myFunc();

    function MyObj() {
        this.myFunc = function () {
            var me = this;
            alert(me.constructor);  // defined
            setTimeout(function(me) {  
                      alert(me.constructor); // undefined
                  }, 100);
        };
    }

解决方案:所选答案是正确的,谢谢.我的问题是简化了我遇到的真正问题,结果证明jQuery在click()方法中修改了'this',以便它指向相关的DOM元素.我创建了一个新的var,'me',以保持'this',并试图将其传递给click方法.我需要做的只是在click事件中使用'me',并让闭包保持对它的引用.将'me'传递给click()失败,原因与此示例中失败的原因相同,即click()没有预料到它.



1> Sean Bright..:

因为这:

function(me) { 

做了:

function() {

你很高兴去.

至于'为什么?' 部分,您正在定义一个带有被调用参数的匿名函数me.当setTimeout()函数调用时,它不传递任何参数,意思me是未定义的.me从参数列表中删除允许先前定义的me在函数内可见.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有