2011-11-19 11 views
6

Estoy construyendo un juego pequeño: tijeras de papel de roca.¿Cómo puedo crear un método en JS como un método abstracto en Java?

tengo un prototipo - RPSPlayer y tengo dos tipos de jugadores: Player1, Player2 (jugador1 & jugador2 son objetos con un prototipo de RPSPlayer) Cada jugador juega con la función: Player1.play().

Cada jugador tiene una estrategia diferente para el juego. Por lo tanto, necesito 2 implementaciones para play(). Si fuera Java, crearía una clase abstracta RPSPlayer con un método abstracto play() y otras 2 clases que heredarían de RPSPlayer; cada uno de ellos tendría su propia implementación para play().

Mi pregunta es: ¿cuál es la forma correcta de hacerlo en JS? Espero haber dejado en claro, gracias a todos.

Respuesta

10

Se puede definir una función de vacío en el prototipo:

RPSPlayer.prototype.play = function() {}; 

o si desea forzar una implementación de esta función, puede hacer que tirar un error:

RPSPlayer.prototype.play = function() { 
    throw new Error('Call to abstract method play.'); 
}; 

Este es cómo el Google Closure library lo está haciendo, con su goog.abstractMethod function:

goog.abstractMethod = function() { 
    throw Error('unimplemented abstract method'); 
}; 

que se va a utilizar como

Foo.prototype.bar = goog.abstractMethod 
+0

pero, ¿dónde implemento las dos funciones diferentes de play()? –

+0

@rob: Bueno, o lo asignas a cada jugador después de que creaste la instancia 'player1.play = function() {} ...', o, si 'Player1' y' Player2' son en realidad "clases" heredadas de 'RPSPlayer', defines las funciones en su prototipo. –

Cuestiones relacionadas