如果您永远不会访问变量,那么将新创建的对象分配给变量是不是错误的javascript练习?
例如:
for(var i=0;i<links.length;i++){
new objectName(links[i]);
}
同样,我不会访问它,因此不需要变量来引用它。
答案 0 :(得分:17)
如果你没有访问它但它仍然有用,那表明构造函数本身具有可见的副作用。一般来说,这是一个坏主意。
如果你根本没有调用构造函数会有什么变化?
如果你的构造函数正在对全局状态做某事,那对我来说非常糟糕。另一方面,你可以只是为了验证而使用它 - 即如果构造函数返回而没有抛出异常,那就没关系。那不是相当那么糟糕,但是如果是这样的话,一个单独的验证方法会让事情变得更加清晰。
答案 1 :(得分:11)
如果您不需要再次使用它,那绝对没问题。
答案 2 :(得分:1)
“是不是错误的javascript练习 将新创建的对象分配给a 变量,如果你永远不会去 访问它?“
我觉得做一个不需要的作业是不好的做法,我认为,不仅仅是针对javascript,而是一般。如果你有所需的副作用,那么从作业的行动中获取它们是不好的做法,原因很简单,从维护的角度来看它是相当不透明的。
答案 3 :(得分:0)
除了创建/初始化对象之外,您的构造函数似乎正在做其他事情。
将更多功能实现到函数或方法中将是一种更清晰的解决方案。
应该使用构造函数来创建和初始化对象。
答案 4 :(得分:0)
如果您不需要再次使用它,那绝对很好。但是我们需要解释为什么。
即使您没有引用对象(如其他建议的对象,动画,侦听器等),对象也可以继续做某事
谁认为这很奇怪,应该在认为不好之前反思一下替代方案:
new objectName().start()
是否更清晰?也许。但是,如果您始终需要在创建后立即调用start()
来使对象有用,则最好在构造函数中包含start()
。这样,您就不会忘记这样做。一个好的对象名称可以说明或暗示对象在创建后会做某事。
示例:
new Baby()有时会开始哭泣。即使您不告诉他某事,他也会活着。
new AutoRegisteringListener();确实需要解释创建此类对象时会发生什么情况吗?您真的很惊讶这个侦听器会注册一些事件吗?
在我看来,重点在于以面向对象的方式进行思考,而不是仅以功能性的方式进行思考:对象可以具有行为。这是他们的主要目的。