所以在我的JavaScript代码库中,我一直使用var me = this
成语来支持缩小。但是我最近开始质疑这个问题,我很想知道使用更聪明的缩小工具是否可以避免将this
赋值给变量?
似乎某个工具应该能够检测创建变量以表示this
的函数,以便在多次调用this
时保存字符。对于布尔值也可以这样做,例如var yes = true, nope = false
。
我可以使用哪些工具来避免在我的代码库中设置var me = this
吗?一般来说,更改代码库以更好地支持缩小是一个好主意吗?
请记住,我确实理解在某些情况下我需要一个分配给this
的变量来引用JavaScript闭包内的外部作用域。我正在使用的var me = this
仅用于支持缩小。
答案 0 :(得分:1)
在准备好实时部署代码之前,您不必担心缩小规模。一旦完成,我建议使用Google的闭包编译器来缩小所有代码。请在此处查看:http://code.google.com/p/closure-compiler/
答案 1 :(得分:1)
它不仅支持缩小,还可以用于闭包。当您创建函数时,例如在回调中使用时,您必须在调用函数时注意“this”。在Javascript中开始时常见的错误是错误的“这个”。 “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();