También puede usar instanceof, ejemplo con polimorfismo básico.
En primer lugar crear una superclase (bola)
// superclass
function Ball() {
this.play = function() {
alert("Ball throw");
};
}
y ahora para algunas subclases (tipos de pelotas)
// subclass
function Basketball() {
this.play = function() {
alert("basketball throw");
};
}
// subclass
function Soccerball() {
this.play = function() {
alert("soccer ball kick/throw");
console.debug("here");
};
}
// subclass
function Baseball() {
this.play = function() {
alert("strike 3 you're out");
console.debug("here");
};
}
Dales funcionalidad de bola, establece también conocido como su superclase mediante prototipo
// set subclass functionality
Basketball.prototype = new Ball();
Soccerball.prototype = new Ball();
Baseball.prototype = new Ball();
Algún polimorfismo (cree un montón de bolas y juegue con todas, pero juegue a base de tipo n)
var bunchOfBalls = [new Baseball(), new Soccerball(), new Basketball()];
for (var i = 0; i < bunchOfBalls.length; i++) {
bunchOfBalls[i].play();
}
Ahora escribe una función que toma un balón, pero sólo quieren trabajar para el tipo específico de pelotas (gráfico sobrecarga de funciones, más o menos)
//overloading dependent upon type
function BasketbalOrBaseballOnlyPlay(aBall) {
if (aBall instanceof Basketball) {
//special basketball function
}
if (aBall instanceof Baseball) {
//special baseball function
}
}
Si aBall es un baloncesto entonces aBall = new Basketball();
luego aBall instanceof Basketball
volvería verdadero para Baloncesto y falso para béisbol, pero es cierto para Ball.
Entonces aBall instanceof Ball
volvería cierto porque un Baloncesto es una Pelota.
See code live at http://jsfiddle.net/kLCPB/
En el caso de que la persona que llama pasa un tercio argumento, pero su valor es indefinido * * esta prueba sería un fracaso. Probablemente sea mejor si la función prueba ** arguments.length ** en su lugar. – NVRAM
Si la persona que llama utiliza 'undefined' como tercer argumento, tomaría eso como señal de que les gustaría que la función sea tratada como si solo se hubieran transmitido dos. Realmente no veo ningún otro propósito legítimo para aprobar en 'undefined'. –