我有像棋盘这样的对象数组,每个对象都有 top
, down
, left
, right
返回对象邻居的函数。
data.field(3,3).left() //returns field(2,3);
我可以像这样链接它
data.field(3,3).left().left().top().right().down().getName();
但是没有像
这样带负极线的物体 data.field(-1,0)
当给定的绳索为负数或大于对象数组时,很容易检测到。您可以返回 false 或空对象 - 但是当没有返回任何内容并且继续链接时会出现错误
Uncaught TypeError: Object #<error> has no method 'down'
这是 ofc 的事情,但是我怎样才能避免这个错误,并在没有对象返回时停止长链而不会出现停止 js 执行的错误?
让我们说:
data.left().left()/*here there is nothing to return*/.right().right().getName(); //should return false
最佳答案
不是为无效位置返回 null,而是返回一个覆盖定向函数的自定义“null 对象”,只返回一个带有返回“invalid location”的 getName 函数的 null 对象,或者在调用这些函数时抛出异常.
nullObject = {
this.left = function(){return this;}
this.right = function(){return this;}
//etc
this.getName = function(){"Invalid Location"}
}
异常处理可能是这样的
try{
piece.left().right().down().getName()
}
catch(exc){
//handle exception
}
顺便说一句,您实际上是在此处创建一个 monad。如果你让它在接收到空对象时停止计算,那么这就是 maybe monad 的一个例子。 .不过,这比这里的实际问题高出一些理论水平。
关于javascript - JS - 停止对象链接而不会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15208874/