簡體   English   中英

與iOS的委托函數等效的Javascript是什么?

[英]What's Javascript equivalent to iOS's delegate function?

- (void)shootMissile {

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

委托函數表示將其委托給另一個文件中的另一個函數。

我不確定我是否會在javascript中遇到類似問題。

根據關於該問題的第二個答案, 代表如何在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);
     }
   }
}

等效項將類似於匿名函數 我想也可以稱為回調函數

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

首先更正以下假設:

“委托功能意味着它將委托給另一個文件中的另一個功能。”

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);

希望這個簡短的說明對您足夠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM