JavaScript样式和标准实践 - 自定义用户函数/对象的“静态”方法定义

时间:2010-09-07 18:14:38

标签: javascript standards

请原谅我在这个问题上可能不正确的术语应用(顺便说一下,请纠正我错在哪里)。

假设我们有一个我们想要定义的自定义对象。关于这个对象的一些方法有意义是'实例'特定的。我们还有一些真正独立于实例的方法,有点像C#或Java等语言中的公共静态方法。

创建这些功能定义的标准做法是什么?目前,我正在做这样的事情:

var User = function(name){
  this.Name = name;
  User.instances.push(this);
};

User.instances = [];
User.doSomething = function(){
  // do something interesting with the set of user instances
};

var me = new User('me');
var you = new User('you');
User.instances; // => [me, you]

注意'static'方法是如何在与prototype / instance方法完全不同的部分中定义的。他们只是没有感觉连接查看代码。在我的理想世界中,我可以将所有内容定义在一起(也许在User = function(){}中),以保持代码更清洁和连接。我理解JS的一个强大功能是你可以分开做事并随时修改。只是好奇标准做法是什么样的。

有时我只是将'静态'定义嵌套在一些括号中 - 即使括号实际上在语法上没有意义:

// Static definitions
{
    User.instances = [];
    User.doSomething = function(){
      // do something interesting with the set of user instances
    };
}

我是否有一种我不知道的标准做法?

1 个答案:

答案 0 :(得分:1)

你的方法非常好,尽管你可以 - 如果你真的坚持 - 尝试做一些古怪的技巧,比如在构造函数中根据它们是否已经分配来有条件地分配这些静态属性。

恕我直言,这不会使其更具可读性,但由于测试(如果您创建了大量这些User个对象,会导致执行代码更差)