- (void)shootMissile {
//Send missile to delegate for storage
if ([delegate respondsToSelector:@selector(shootMissile)]) {
[delegate performSelector:@selector(shootMissile)];
}
}
委托函数意味着它委托给另一个文件中的另一个函数。
我不确定我是否在javascript中碰到了类似的东西。
答案 0 :(得分:2)
根据这个问题的第二个答案How does a delegate work in objective-C?:
代表是一种设计模式;没有特殊的语法或语言支持。
该模式当然可以在Javascript中使用,其中函数是第一类对象,因此可以作为参数传递给其他函数。
用JS重写你的例子:
function shootMissile(selector) {
if (selector.respondsTo(shootMissile)) {
selector.perform(shootMissile);
}
}
}
假设“selector”是一个具有两个函数属性(即方法)的对象,称为“respondsTo”和“perform”。
上述更自然(或至少更具功能性)的版本将是:
function shootMissile(canShootMissile, fireMissile, missile) {
if (canShootMissile(missile)) {
fireMissile(missile);
}
}
}
答案 1 :(得分:1)
等价物将类似于匿名函数。我想也可以称之为回调函数。
答案 2 :(得分: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);
希望这个简短的解释对你来说已经足够了。