2

我最近开始学习和实现 JavaScript 中的对象。但这让我想,如果一个对象的功能可以放在一个方法中,那么为什么要使用多个方法Example.prototype.update = function()Example.prototype.draw = function()如果这些方法之一不需要参数呢?我可以只定义然后调用一种方法,例如Example.prototype.do = function()并放置这两种方法所具有的所有功能。它更简单,代码更少,但也许在我的对象中拥有一个具有多个特定方法的结构会更好?谢谢你。

编辑:我问这个关于没有参数的方法,因为如果你将几个方法的所有功能与参数分组,那么将十几个参数输入到一个函数中将是太多乏味的工作。

感谢您的投票!

4

2 回答 2

3

有不同的原因:

概述

清洁代码:敏捷软件工艺手册中,罗伯特·马丁说:

函数的第一条规则是它们应该很小。函数的第二个规则是它们应该小于这个值。函数不应长 100 行。函数几乎不应该是 20 行长。

随之而来的还有可维护性,我的意思是,如果功能很长,人类对编码的理解就会开始缺乏。

可重用性

关于函数的全部意义在于重用它们。所以想象一个函数多次调用同一对象的另一个函数。要合并它,您可能需要复制您的编码。

其他原因

  1. 性能:也许你不想同时做所有的事情(可能是因为它很耗时或者你只想在需要的时候做......)或者你根本不想做一些事情?
  2. 逻辑:有些东西就像绘图方法和擦除方法一样不属于一起。将它们合并为一个函数是没有意义的。
  3. 封装:每个函数都有自己的作用域,所以如果你只使用一个函数,你可能会弄乱作用域
于 2016-08-05T04:52:55.630 回答
0

接受的答案是正确的,但我也想提供一个更简化的答案。

你考虑组合update()anddraw()函数的方式可能看起来很有意义,因为你总是一个接一个地调用,但它对 99.99% 的其他函数没有意义。

您可以将函数视为告诉计算机做一件事(“一件事”的定义故意非常广泛),而编程的全部意义在于以不同的组合调用函数以使计算机做一些有趣的事情。如果你组合功能,你就会失去这个能力。

考虑名为walkForward()turnLeft()和的示例函数turnRight()。通过以不同的顺序调用这些函数,你可以告诉你的演员走你想要的任何路径。

如果我们应用您的逻辑并将这三个功能组合成一个walk()功能,那么该功能究竟会做什么?我们如何告诉演员走一条特定的路?

即使使用update()anddraw()函数,一个接一个地调用它们并不总是有意义的。也许您想在不绘制每一帧的情况下运行模拟,因此您可能会调用update()很多次而不调用draw(). 或者,也许您想暂停动画,因此您将停止调用update()draw()改为调用。如果你将它们组合成一个函数,你就会失去这种自由。

编程就是自由地告诉计算机做你想做的事,而组合功能会剥夺这种自由。

于 2016-08-05T13:48:43.767 回答