Javascript:使用t_this里面的匿名函数被认为有害吗?

时间:2011-04-18 19:49:24

标签: javascript jquery

我一直在使用:

var t_this = this; // Used inside anonymous functions

在处理'class'中的匿名函数时已经有一段时间了,但总是带着不安,因为它看起来像代码味道。这是一种不好的做法吗?还有更好的选择吗?

示例:

$("#container").click(function() {
    t_this.doSomething();
});

6 个答案:

答案 0 :(得分:3)

这是一种常见做法;这没什么不对。

但是,下划线通常不用于Javascript标识符;我将变量命名为meself(或甚至that

答案 1 :(得分:2)

完全没有,虽然我通常称之为$this(如果它是一个正确的jQuery对象)或that,除非我能给它一个更具描述性的名称。

答案 2 :(得分:2)

这是在外部范围中引用this的值的标准方法。例如,考虑一下:

function output() {
    var t_this = this;
    $("#container").click(function() {
        t_this.doSomething();
    });
}

this处理程序中click的值与外部函数中this的值不同。将其值分配给另一个变量正是解决此问题的方法。

答案 3 :(得分:1)

除了可能选择更好的名称之外,在许多情况下都建议使用此做法,并通过减少对当前作用域之外的对象查找的调用来充当缓存机制。建议不仅仅是this

例如,如果您有一个超出当前范围的对象,如:

var Application = {
    a: {
        b: {
            c: {}
        }
    }
};

您需要缓存它以减少遍历对象的处理。而不是:

Application.a.b.c.doSomething();

// later

Application.a.b.c.doSomething();

缓存它,更快:

var c = Application.a.b.c;

c.doSomething();

// later

c.doSomething();

通过这种方式,c只被查询一次,而不是多次。

答案 4 :(得分:1)

另一种方法是使用proxy

$("#container").click($.proxy( 
    function() { this.doSomething(); },
    this // you can use any variable here, and it will be called 'this' inside the function
));

这样您就可以将上下文传递给内部范围。不是说它更好,但也许它对你来说味道更好。我更喜欢这种方式。

答案 5 :(得分:0)

我不明白,为什么你需要别名这个而不是使用它?当我有另一个与不同调用者的嵌套匿名函数时,我只将作为别名。例如:

    $('#container').click(function() {
        // this refer to #container
        this.doThis();

        // alias this
        objPointer = this;

        // call a function on different objects
        $('div.class').click(function(){
            // this now refer to div.class
            this.doElse()

            // objPointer refer to #container
            objPointer.doThis()
        });
    });