Javascript'这个'问题

时间:2009-01-27 02:20:25

标签: javascript jquery

当setTimeout调用它的匿名回调时,为什么'我'和'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 个答案:

答案 0 :(得分:10)

因此:

function(me) { 

成功:

function() {

你很高兴。

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