【问题标题】:Correct Approach: Always Passing all Variables as Function Arguments?正确的方法:总是将所有变量作为函数参数传递?
【发布时间】:2012-05-04 09:51:04
【问题描述】:

我正在考虑正确的编程方法:

在编写 JavaScript 代码时,我会从我的函数和对象中引用许多动态创建的全局对象和变量,尽管我没有将它们作为函数参数传递。这样,我失去了函数的多功能性和独立性,因为函数和对象依赖于我的应用程序中的另一个全局对象。我知道这一事实,但是,我的对象/函数通常需要许多变量才能使用。

您能否建议我是否应该始终努力将所有变量和对象作为函数参数传递?这样就很清楚了,函数需要哪些变量,如果我提供正确的参数,函数将始终有效

另外,我不需要这么严格,只要我的函数/对象工作,尽管它们引用全局对象,我就不需要再为这个问题烦恼了吗?

我需要知道正确的编程方法,所以我不会习惯错误的事情。

【问题讨论】:

  • 我想每个人都会同意你应该争取尽可能少的全局变量。 - 代码变得更加可移植 - 你的类的“界面”将更加清晰 - 在性能方面通常更好 - 等等......互联网上到处都是讨论这个问题的文章
  • @Vic:+1 以获得合理的答案。谢谢你。是的,你说的很有道理。如果所有开发人员都得出结论,我想听听关于这个主题的更多意见。

标签: javascript oop function


【解决方案1】:

是的,您希望尽可能少地使用全局变量。如果结果你发现你向每个函数传递了很多参数,那么你应该查看这些参数并询问它们有什么共同点。很多时候,添加额外的对象会有所帮助。您可以将参数组合到对象的实例变量中并传递一个对象。然后,您无需提取实例变量,而是将操作委托给该对象。

例如,假设您有以下代码:

    drawLine(fromX, fromY, toX, toY, thickness, color, canvas)

您可以创建一个点来保存 x,y 值,并创建一个图形上下文来保存厚度、颜色和画布。结果调用变为:

    drawLine(from, to, context)

您减少了参数的数量并创建了包含常用操作的可重用对象。

【讨论】:

  • 将 drawLine 设为 Point.prototype 上的方法甚至可能有意义,因此调用变为 from.drawLine(to, context)...
  • 我倾向于将 drawLine 移动到上下文对象而不是使其成为 context.drawLine(from,to)
  • @DavidBuck:+1,感谢您的回答。这对我来说很有意义,它向我保证了我的想法,但并不总是遵循。我认为,无需等待另一个答案,我将这个答案标记为已接受的答案
猜你喜欢
  • 2020-05-23
  • 2012-01-14
  • 1970-01-01
  • 2014-03-08
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多