- (void)shootMissile {

  //Send missile to delegate for storage
  if ([delegate respondsToSelector:@selector(shootMissile)]) {
     [delegate performSelector:@selector(shootMissile)];
   }
}


委托函数表示将其委托给另一个文件中的另一个函数。

我不确定我是否会在javascript中遇到类似问题。

最佳答案

根据关于此问题How does a delegate work in objective-C?的第二个答案:


  代表是一种设计模式。没有特殊的语法或语言支持。


该模式当然可以在Javascript中使用,因为Javascript中的函数是一类对象,因此可以将其作为参数传递给其他函数。

要在JS中重写示例:

function shootMissile(selector) {
     if (selector.respondsTo(shootMissile)) {
         selector.perform(shootMissile);
     }
   }
}


大概“选择器”是具有两个函数属性(即方法)的对象,分别称为“ respondsTo”和“ perform”。

上面看起来更自然(或至少功能更多)的版本是:

function shootMissile(canShootMissile, fireMissile, missile) {
     if (canShootMissile(missile)) {
         fireMissile(missile);
     }
   }
}

10-07 14:28