2012-12-01 30 views
0
- (void)shootMissile { 

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

委託函數意味着它委託給另一個文件中的另一個函數。什麼是Javascript相當於iOS的委託功能?

我不知道我遇到類似的東西在JavaScript中。

+2

這是我見過的關於將Objective-C移植到Javascript的第二個問題。如果以這種方式進行處理,您將面臨一個痛苦的世界,因爲您的代碼依賴於Objective-C習語和Cocoa框架對象。Javascript足夠不同,你需要退後一步,並考慮到Javascript的整個設計。 – sosborn

回答

2

由於每對這個問題How does a delegate work in objective-C?第二應答:

委託是一個設計圖案;沒有特殊的語法或語言支持。

該模式當然可以在Javascript中使用,其中函數是第一類對象,因此可以作爲參數傳遞給其他函數。

要重寫在JS你的例子:

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

凡大概「選擇器」是具有兩個功能性質(即方法。)稱爲「respondsTo」和「執行」的對象。

的更自然的(或至少多個功能)版本以上將是:

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

首先以下假設的校正:

「委託功能意味着它的委託給另一功能在不同的文件中。「

1)忘記「文件」的東西,這是所有關於上下文(例如一個類的實例)

2)不委託給其他功能:功能委託給另一個上下文(在JavaScript,請訪問

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

我們可以將其委託給了一堆不同的上下文(=對象),例如船:

給定下面的函數「這個」關鍵字)

因此JavaScript,背景

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

希望這個簡短的解釋是夠你用的。