2

所以在我的 JavaScript 代码库中,我一直在使用这个var me = this成语来支持缩小。但我最近开始质疑这一点,我想知道是否this可以使用更智能的缩小工具来避免分配给变量?

似乎一个工具应该能够检测到创建一个变量来表示的函数this会在多次调用this. 布尔值也可以这样做,例如var yes = true, nope = false.

有没有我可以使用的工具来避免设置var me = this我的代码库?一般来说,更改代码库以更好地支持缩小是一个好主意吗?

请记住,我确实了解在某些情况下,我需要分配一个变量this来引用 JavaScript 闭包内的外部范围。var me = thisI amtaking about的使用仅用于支持缩小。

4

2 回答 2

1

在准备好实时部署代码之前,您不必担心缩小问题。完成后,我建议使用 Google 的闭包编译器来缩小所有代码。在这里查看:http ://code.google.com/p/closure-compiler/

于 2013-02-06T21:42:40.677 回答
1

它不仅支持缩小,还可以用于闭包。当您创建函数时,例如在回调中使用时,您必须注意调用函数时的“this”是什么。开始使用 Javascript 时的一个常见错误是得到错误的“this”。“var me = this”模式有助于避免这种情况。例如

function doSomething() {
    var me = this;
    callSomethingAsynchronous(42, function (result) {
        // Here 'this' will depend on the caller of the callback functon.
        me.theResult = result;
    });
}

请注意,像 Ext 这样的框架不鼓励这样做,并让您将范围变量与回调一起传递。

callSomethingAsynchronous(42, me.handlerFunction, me);

它允许您将 handlerFunction 的定义保留在原型上,而不是继续创建它们。有时闭包只是更好的方法,因为您必须包含仅在运行时才知道的信息

function sayHelloInAContrivedWay (name) {
    getTheGreetingAsync(function (greeting) {
        console.log(greeting + name);
    });
}

每当我在一个函数中多次访问它时,我都会使用“var me = this”。缩小器确实将其减少为单个字符。如果我正在访问一个子对象,我也会为此创建一个 var

function keepInnerWombatFit () {
   var me = this,
       wombat = me.inner.wombat;

   wombat.run();
   wombat.jump();
   wombat.sitDown();

   me.excerciseCount++;
}

我已经看到一次又一次地输入(或剪切和粘贴)大量嵌套访问的代码,这些代码无法缩小,可能会花费一点性能并且更难阅读和维护。

this.inner.wombat.run();
this.inner.wombat.jump();
this.inner.wombat.sitDown();
于 2013-05-23T15:12:45.447 回答