[英]What is the equivalent of jQuery's .before() function in 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);
}
}
}
等效項將類似於匿名函數 。 我想也可以稱為回調函數 。
首先更正以下假設:
“委托功能意味着它將委托給另一個文件中的另一個功能。”
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.