如今大多数 JavaScript 和 PHP 框架的重要组成部分之一是能够链接类方法。我收到了很多关于这如何可能的问题,所以我想介绍允许在您自己的自定义类中进行链接的基础知识。
让我们首先从在 MooTools Element 类上实现一些新方法开始:
/* implement functionality */ Element.implement({ doTaskA: function() { /* do stuff */ }, doTaskB: function() { /* do stuff */ } });
根据这篇文章,上述方法实际上做了什么并不是很重要。现在您已准备好这些方法,请尝试以下操作:
/* Example */ $('myElement').doTaskA().doTaskB();
好吗?没有。您最终会遇到以下错误:
$('myElement').doTaskA() is undefined
什么? doTaskA() 绝对存在!!为什么会出现此错误?虽然 doTaskA() 确实存在,但该方法不返回任何内容。
方法链接的策略是返回对当前对象的引用。如何?让我们更新 doTaskA() 和 doTaskB() 方法以允许方法链接:
Element.implement({ doTaskA: function() { /* do stuff */ return this; }, doTaskB: function() { /* do stuff */ return this; } });
返回 this 会保留引用,这反过来又会保持链接的能力。您可以在 PHP 中做同样的事情:
public function doTaskA() { return $this; } public function doTaskB() { return $this; } /* usage */ $myObject->doTaskA()->doTaskB();
类方法链接是保持代码简洁的好方法。不过,不要对链接过于执着——一定要在链接与可读性之间取得平衡。