Javascript - 使用local var或this?

时间:2011-12-20 02:07:17

标签: javascript caching this keyword

我正在使用原型方法,这里是scenerio

function Foo () {
    this.x = 5;
    this.y = 2;
    this.z = this.addValues();
}
Foo.prototype = {
    addValues:  function (){
        return this.x + this.y; 
    }
}

显然这只是一个简单的例子;在实际项目中,'addValue'函数中会有很多活动。使用'this'关键字100次或将其缓存到局部变量可以帮助任何性能改进。例如,下面会有什么不同?

Foo.prototype = {
    addValues:  function (){
        var self = this;
        return self.x + self.y; 
    }
}

3 个答案:

答案 0 :(得分:5)

self.xthis.x之间可能没有任何有意义的区别。 可能会产生影响的是

  var x = this.x, y = this.y;

  // massive amounts of computation involving x and y

这种微观优化可能不值得,除非你真的参与了一些前沿的游戏开发或其他什么。先将你的算法数据结构添加到snuff中,然后再担心这样的事情。您永远不知道JavaScript运行时系统的开发人员何时会引入新的优化。它们无法修复您的错误算法,但它们可以极大地影响微优化。

答案 1 :(得分:2)

this是访问xy的标准方式。如果将this缓存到本地变量,您将无法获得任何改进 - 如果有的话,您通过首先声明self来浪费空间。

您看到的唯一可能的风险是这样的:

var f = new foo();
var stupid = f.addValues;
stupid(); // whoops - this is suddenly the global object, 
          // and your method is broken.

话虽如此,我认为你不应该责备人们滥用你的功能,我不担心。

此外,按照惯例,用作构造函数的函数应以大写字母开头。考虑将foo重命名为Foo

答案 2 :(得分:0)

在此示例中,将this分配给self不应有任何区别。 JavaScript不按值分配对象,而是通过引用分配对象,这意味着selfthis都指向同一个对象。这样做你什么也得不到。

foo.prototype = {
    addValue:  function (){
       // self and this point to the same object! 
       var self = this;
        return self.x + self.y; 
    }
}