不将新对象分配给变量是不好的做法?

时间:2010-04-07 17:02:51

标签: javascript

如果您永远不会访问变量,那么将新创建的对象分配给变量是不是错误的javascript练习?

例如:

for(var i=0;i<links.length;i++){
    new objectName(links[i]);
}

同样,我不会访问它,因此不需要变量来引用它。

5 个答案:

答案 0 :(得分:17)

如果你没有访问它但它仍然有用,那表明构造函数本身具有可见的副作用。一般来说,这是一个坏主意。

如果你根本没有调用构造函数会有什么变化?

如果你的构造函数正在对全局状态做某事,那对我来说非常糟糕。另一方面,你可以只是为了验证而使用它 - 即如果构造函数返回而没有抛出异常,那就没关系。那不是相当那么糟糕,但是如果是这样的话,一个单独的验证方法会让事情变得更加清晰。

答案 1 :(得分:11)

如果您不需要再次使用它,那绝对没问题。

答案 2 :(得分:1)

  

“是不是错误的javascript练习   将新创建的对象分配给a   变量,如果你永远不会去   访问它?“

我觉得做一个不需要的作业是不好的做法,我认为,不仅仅是针对javascript,而是一般。如果你有所需的副作用,那么从作业的行动中获取它们是不好的做法,原因很简单,从维护的角度来看它是相当不透明的。

答案 3 :(得分:0)

除了创建/初始化对象之外,您的构造函数似乎正在做其他事情。

将更多功能实现到函数或方法中将是一种更清晰的解决方案。

应该使用构造函数来创建和初始化对象。

答案 4 :(得分:0)

如果您不需要再次使用它,那绝对很好。但是我们需要解释为什么。

即使您没有引用对象(如其他建议的对象,动画,侦听器等),对象也可以继续做某事

谁认为这很奇怪,应该在认为不好之前反思一下替代方案:

  • 也许有人忘记将对象分配给变量?也许他犯了一个更严重的错误:他忘记了以后再使用它。合理吗?奇怪吗?
  • new objectName().start()是否更清晰?也许。但是,如果您始终需要在创建后立即调用start()来使对象有用,则最好在构造函数中包含start()。这样,您就不会忘记这样做。
  • 如果您可以使用没有内部构造函数的静态方法来执行此操作,那么真正的问题是:为什么要有一个Object?一个简单的功能就足够了。
  • 如果您仅创建一个静态方法来创建新的Object,则从一侧看可能会更清楚(它将执行某些操作(但是无论如何,您都应假定构造函数可以进行操作),这是一个事实)在另一边不太清楚,通话后某些东西可以继续起作用。如果您不是前一种情况(不创建对象),则最好使用构造函数来强调某些内容的创建。但是,更清楚的是主观的,可能毫无意义地争论更多。

一个好的对象名称可以说明或暗示对象在创建后会做某事。

示例:

new Baby()有时会开始哭泣。即使您不告诉他某事,他也会活着。

new AutoRegisteringListener();确实需要解释创建此类对象时会发生什么情况吗?您真的很惊讶这个侦听器会注册一些事件吗?

在我看来,重点在于以面向对象的方式进行思考,而不是仅以功能性的方式进行思考:对象可以具有行为。这是他们的主要目的。