代码之家  ›  专栏  ›  技术社区  ›  Mike

Javascript“this”问题

  •  2
  • Mike  · 技术社区  · 16 年前

    为什么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 回复  |  直到 16 年前
        1
  •  10
  •   Sean Bright Sean Stinehour    12 年前

    因此:

    function(me) { 
    

    成功:

    function() {
    

    你可以走了。

    至于“为什么?'part,您正在定义一个匿名函数,该函数接受一个名为 me .何时 setTimeout() 调用该函数时,它不传递任何参数,这意味着 将未定义。移除 从参数列表中允许之前定义的 在功能中可见。