javascript - JS - 停止对象链接而不会出错

标签 javascript oop

我有像棋盘这样的对象数组,每个对象都有 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/

相关文章:

javascript - True 和 False 循环数组

javascript - 使用复选框添加到 JavaScript 中的字符串

c++ - 如何在C++中实现初始化终结器?

python-3.x - 如何在 Python 3.7.x 中使用带有 @dataclass 的 list[customClass] 作为类型

c++ - 在 C++ 中,我们如何在不使用友元函数的情况下通过对象调用私有(private)函数?

java - 创建许多对象类型/类只是为了使用 instanceof

javascript - 悬停时 anchor 上的文字会发生变化

javascript - 创建过多 DOM 后页面挂起

c++ - 是否可以使用指向未实例化对象的指针作为 C++ 中的变量?

Javascript OOP特权方法以私有(private)参数作为输入访问私有(private)方法