0
- (void)shootMissile {

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

デリゲート関数とは、別のファイル内の別の関数へのデリゲートであることを意味します。

JavaScriptでそのようなことに遭遇したかどうかはわかりません。

4

3 に答える 3

2

この質問に対する2番目の回答によると、デリゲートは目的Cでどのように機能しますか? :

デリゲートは設計パターンです。特別な構文や言語サポートはありません。

このパターンは、関数がファースト クラス オブジェクトである Javascript で使用できるため、他の関数に引数として渡すことができます。

JS で例を書き直すには:

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

おそらく「セレクター」は、「respondsTo」と「perform」と呼ばれる2つの機能プロパティ(つまりメソッド)を持つオブジェクトです。

上記のより自然に見える (または少なくともより機能的な) バージョンは次のようになります。

function shootMissile(canShootMissile, fireMissile, missile) {
     if (canShootMissile(missile)) {
         fireMissile(missile);
     }
   }
}
于 2012-12-02T00:08:31.843 に答える
1

同等のものは無名関数のようなものになります。また、私が推測するコールバック関数と呼ばれることもあります。

http://en.wikipedia.org/wiki/Anonymous_function#JavaScript

于 2012-12-01T23:51:52.370 に答える
1

まず、次の仮定を修正します。

「デリゲート関数とは、別のファイル内の別の関数へのデリゲートであることを意味します。」

1)「ファイル」のことは忘れてください。それはすべてコンテキストに関するものです(たとえば、クラスインスタンス)

2) 他の関数に委譲しない : 関数は別のコンテキストに委譲されます (Javascript では、"this" キーワードでコンテキストにアクセスします)。

したがって、JavaScript では、次の関数が与えられます。

var shootMissile = function () {
    this.missiles --;
};

たとえば、ボートなど、さまざまなコンテキスト (= オブジェクト) に委譲することができます。

var Boat = function () {
    this.missiles = 10 ;
},
boatInstance = new Boat () ;

または飛行機:

var Plane = function () {
    this.missiles = 5 ;
},
planeInstance = new Plane () ;

最後に実際の例:

// planeInstance will have 4 missiles after call of delegated function
shootMissile.apply (planeInstance);

// boatInstance will have 9 missiles after call of delegated function
shootMissile.apply (boatInstance);

この短い説明で十分であることを願っています。

于 2012-12-02T00:15:46.243 に答える