Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不将新对象分配给变量是一种不好的做法吗?_Javascript - Fatal编程技术网

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

Javascript 不将新对象分配给变量是一种不好的做法吗?,javascript,Javascript,如果您永远都不会访问一个新创建的对象,那么不将它分配给一个变量是否是一种糟糕的javascript实践 例如: for(var i=0;i<links.length;i++){ new objectName(links[i]); } for(var i=0;i如果您不需要再次使用它,那绝对没问题。如果您不访问它,但它仍然有用,这表明构造函数本身有明显的副作用。一般来说,这是个坏主意 如果根本不调用构造函数,会发生什么变化 如果你的构造函数对全局状态做了一些事情,我觉得这很糟糕。另

如果您永远都不会访问一个新创建的对象,那么不将它分配给一个变量是否是一种糟糕的javascript实践

例如:

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

for(var i=0;i如果您不需要再次使用它,那绝对没问题。

如果您不访问它,但它仍然有用,这表明构造函数本身有明显的副作用。一般来说,这是个坏主意

如果根本不调用构造函数,会发生什么变化

如果你的构造函数对全局状态做了一些事情,我觉得这很糟糕。另一方面,你可能只是为了验证而使用它——也就是说,如果构造函数返回时没有抛出异常,那没关系。这并不是很糟糕,但是如果是这样的话,单独的验证方法会让事情变得更清楚案例

“不这样做是不好的javascript实践吗 将新创建的对象指定给 变量,如果你永远不会 访问它?”

我觉得做一个不需要的任务是一种不好的做法,而且,我认为,不仅仅是对javascript,而且是对一般来说。如果有你想要的副作用,从任务的动作中获得它们是一种不好的做法,原因很简单,从维护的角度来看,这是相当不透明的


.

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

在函数或方法中实现额外的功能将是一个更干净的解决方案


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

如果您不需要再次使用它,那绝对没问题。但是我们需要解释一下原因

对象可以继续执行某些操作,即使您没有对它的引用(如其他建议的、动画、侦听器等)

认为这很奇怪的人,在说这不好之前,应该考虑一下其他选择:

  • 也许有人忘了将对象赋给变量?也许他犯了更严重的错误:他后来忘了使用它。这合理吗?奇怪吗
  • new objectName().start()
    是否更清晰?可能吧。但是如果您总是需要在创建对象后立即调用
    start()
    ,以使对象有用,最好在构造函数中包含
    start()
    。这样您就不会忘记这样做
  • 如果你可以用一个静态的方法,而不需要内部的构造函数,那么真正的问题是:为什么你有一个对象?一个简单的函数就足够了
  • 如果您创建一个静态方法只是为了创建新对象,那么从一方面看,它可能会做一些事情(但您应该假设构造函数可以做一些事情,这是事实),而从另一方面看,调用后某些事情是否可以继续工作则不太清楚。如果您不是在前一种情况下(没有创建对象),也许最好强调使用构造函数来创建某些东西。但更清楚的是主观的,更多的争论是没有意义的
一个好的对象名可以澄清或暗示该对象在创建后将执行某些操作

示例:

新生婴儿有时会哭,即使你不告诉他,他也会活下来

new AutoRegisteringListener();真的需要解释创建这样的对象时会发生什么?这个侦听器将自己注册到某些事件中,您真的感到惊讶吗


在我看来,关键是要以面向对象的方式来思考,而不是只以函数的方式来思考:对象可以有行为。这就是它们的设计目的,除其他外。

为什么要创建一个新变量而不需要以后访问它?我打赌函数有一些副作用,比如添加“This”对全局贴图或其他东西的引用。基本上,如果我将其用于动画对象的单独实例,以便每个动画相互独立。新建颜色调制器('blue')。显示文本('hello world'))。构造函数和对象本身位于var/object中,因此它不处于全局状态。如果我根本不调用构造函数,那么我就不会在传递给它的每个元素上获得我想要的动画的独立实例。@Jeff:那么你是说当你调用构造函数时,它会添加自身(或类似的东西)对于传递给它的参数?我觉得有点难闻。这是一种常见的情况。您创建一个
新动画(某些元素)
,可能需要保留动画实例,以便调用
Animation.stop()
。但在这种情况下,你可能永远都不想停止动画。在这种情况下,扔掉动画没有坏处。那么,你是说既然作业不需要,这就可以了吗?代词太多了:这是什么?我说的是,因为作业似乎没有任何功能(目的)这样做的形式不好,所以不要这样做。对不起,我会尽量多理解。你是说赋值(var something=newObject(links[I]);)没有任何意义,所以不要这样做,只创建一个对象而不将其分配给变量是可以接受的?抱歉,Jeff,没有注意到您之前的评论……我想不知为什么我没有被理解,所以我会重新尝试:如果一个赋值根本没有任何意义,不要这样做,同样,如果对象的创建失败了RVE没有任何用途,也不要这样做。但是,如果对象的创建或赋值操作不是直接使用的,而是有一些预期的副作用,那么我建议找到另一种方法,以便在代码中更清楚地显示您正在尝试做什么。例如,如果试图引发事件,可能会这样做如果可能的话,请直截了当。我不同意。我认为构造函数应该尽一切努力使对象“可用”,这可能涉及很多复杂的代码。看起来