所以我有一个相当大的面向对象的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中最终得到很多全局变量/对象,那么每次只是简单地重新声明变量会不会影响性能?
答案 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中的垃圾收集取决于浏览器,大多数现代浏览器都能很好地处理它。如果你继续使这些全局化,你可能会看到轻微的性能提升,因为它不是每次都执行那行代码。但是,我无法想象通过在类上创建这些静态属性来显着提高性能,但如果它们没有改变,那么它会更有意义。