理解对象链

时间:2014-09-10 01:07:42

标签: javascript

我正在学习JavaScript中的对象/方法链接,我想确保我理解正确。

如果以下代码是没有对象链接的JavaScript示例:
var people = helper.getPeople();
var bob = people.find("bob");
var email = bob.getEmail();

以下代码是在应用对象链接之后:
var email = helper.getPeople().find("bob").getEmail();

我是否认为对象链只是一种“向下钻取”的方式。进入一个物体,达到"子物体"或属性/方法等......?

如果这两个代码示例应该做同样的事情,为什么在对象链接的示例中不需要var声明?如果在流程中没有声明新的变量,我不明白链式语句是如何相同的。

我可以看到节省空间和在一行上编写代码的价值,我在网上的所有研究表明,这被认为是一种直观,简化的编写方式。但是,我觉得我能够更好地阅读第一个例子(没有对象链接)。这可能只是因为我不熟悉JavaScript,但哪个例子被认为是良好的编码实践?

此外,对象链的目的仅仅是为了到达未在全局范围中定义的对象吗?一种到达本地物体的方法?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  

我是否认为对象链只是一种“向下钻取”的方式。进入一个物体,达到"子物体"或属性/方法等......?对象链的目的仅仅是为了达到未在全局范围内定义的对象吗?一种到达本地物体的方法?

可能是。这些方法中的每一个都使用方法返回另一个对象,这是链接的秘密。 "向下钻井"对于某些用途,可能是适当的措辞,例如您已经显示的用途,其中返回不同的对象。

但是,这些返回的对象是否被隐藏,本地"子对象",可以通过其他方式访问,或者只是通过该方法即时创建,甚至是返回自身的原始对象,取决于方法和API设计。但是,所有选项都会产生有效的链接。

  

如果这两个代码示例应该做同样的事情,为什么在对象链接的例子中不需要var声明?如果在流程中没有声明新的变量,我不明白链式语句是如何相同的。

返回立即访问的对象不需要将它们分配给任何变量。它们当然是在某个地方保存在记忆中,但没有附加明确的标识符。

  

这可能只是因为我不熟悉JavaScript,但哪个例子被认为是良好的编码习惯?

取决于。通常,如果您不需要,最好不要创建变量。如果您只对该电子邮件感兴趣并且无法再次访问所有peoplebob,则没有理由为他们创建变量。

通过将每个方法调用放在一个新行上可以提高可读性,这在JS中是常见的链接:

var email = helper.getPeople()
  .find("bob")
  .getEmail();

(后续行的各种缩进样式)