什么是Javascript相当于iOS的委托功能?

时间:2012-12-01 23:46:47

标签: javascript ios

- (void)shootMissile {

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

委托函数意味着它委托给另一个文件中的另一个函数。

我不确定我是否在javascript中碰到了类似的东西。

3 个答案:

答案 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)

等价物将类似于匿名函数。我想也可以称之为回调函数

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

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

希望这个简短的解释对你来说已经足够了。