面向对象的Javascript /变量声明/性能

时间:2011-08-19 02:27:24

标签: javascript performance oop

所以我有一个相当大的面向对象的javascript类,有大约120个函数(很多getter和setter)。其中一些函数的变量基本上是常量。

我想知道的是,我应该在对象的全局范围内声明这些变量,因此每次运行该函数时都不必重新声明变量吗?

下面是一个示例函数。 this.displayContacts运行了几次(并且总是在对象中运行),所以在这种情况下,没有必要在函数内声明'codes'对象?

function orderObject() {

  this.displayContacts = function() {
    var codes  = {'02':'02','03':'03','07':'07','08':'08'};
       // do something with codes
  };

}

那么,这会更好吗,表现明智吗?

function orderObject() {
var codes  = {'02':'02','03':'03','07':'07','08':'08'};
  this.displayContacts = function() {
    // do something with codes.
  };

}

我的另一个问题是,如果我在主orderObject中最终得到很多全局变量/对象,那么每次只是简单地重新声明变量会不会影响性能?

3 个答案:

答案 0 :(得分:1)

绝对。

function MyClass() {
   this.somevar = ''; // instance scoped variable
};

MyClass.CODES = {'02':'02'...}; // 'Class' scoped variable; one instance for all objects

MyClass.prototype.instanceMethod = function(){
  // 'this' refers to the object *instance*
  // it can still use MyClass.CODES, but can also account for variables local to the class
}

CONSTANT可以说是“静态的”,在java-talk中。如果您的codes对于类(以及应用程序的其余部分)是全局的,那么您将以这种方式节省大量开销 - 仅定义对象一次。请注意,对于那些函数不需要对特定于类实例的变量进行操作的情况,您也可以使用“静态”类级别方法。

除非您的应用程序非常强大,否则性能优化可能不会明显加快。但这并不意味着OO设计不值得 - 如果你打算以面向对象的方式使用javascript,那么使用优秀的OO原则并不是一件坏事,也绝不是坏主意。

答案 1 :(得分:1)

我会说,如果你在多个地方使用的东西,它应该成为你的对象的属性,这样它就不必每次都重新声明。如果必须改变常量,它还有助于使对象的维护更容易。然后你只在一个地方改变它,而不必追捕你使用它的所有位置。

不要重复自己。

答案 2 :(得分:1)

JavaScript中的垃圾收集取决于浏览器,大多数现代浏览器都能很好地处理它。如果你继续使这些全局化,你可能会看到轻微的性能提升,因为它不是每次都执行那行代码。但是,我无法想象通过在类上创建这些静态属性来显着提高性能,但如果它们没有改变,那么它会更有意义。