Można również użyć instanceof, przykład z podstawowym polimorfizmem.
Najpierw utwórz superklasę (piłka)
// superclass
function Ball() {
this.play = function() {
alert("Ball throw");
};
}
a teraz przez kilka podklas (rodzaje piłek)
// 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");
};
}
Daj im funkcjonalność Ball, aka ustawił jeszcze superklasę poprzez prototyp
// set subclass functionality
Basketball.prototype = new Ball();
Soccerball.prototype = new Ball();
Baseball.prototype = new Ball();
Jakiś polimorfizm (utwórz pęczek kul i baw się nimi wszystkimi, ale bazuj na n rodzaj)
var bunchOfBalls = [new Baseball(), new Soccerball(), new Basketball()];
for (var i = 0; i < bunchOfBalls.length; i++) {
bunchOfBalls[i].play();
}
Teraz napisać funkcję, która przyjmuje piłkę, ale tylko chcesz pracować dla konkretnego rodzaju piłek (wizualizacja funkcja przeciążenia, bardziej lub mniej)
//overloading dependent upon type
function BasketbalOrBaseballOnlyPlay(aBall) {
if (aBall instanceof Basketball) {
//special basketball function
}
if (aBall instanceof Baseball) {
//special baseball function
}
}
Jeśli aBall jest Koszykówka więc aBall = new Basketball();
następnie aBall instanceof Basketball
zwróci true dla koszykówki i false dla baseball, ale prawdziwe dla Ball.
Tak więc aBall instanceof Ball
powrócił prawdą, ponieważ koszykówka jest piłką.
See code live at http://jsfiddle.net/kLCPB/
W przypadku, gdy rozmówca przechodzi 3rd argumentu, ale jego wartość jest niezdefiniowana * * Ten test nie powiedzie się. Prawdopodobnie lepiej, jeśli zamiast tego funkcja testuje ** arguments.length **. – NVRAM
Jeśli osoba wywołująca używa "niezdefiniowanego" jako trzeciego argumentu, wziąłbym to, aby zasygnalizować, że chcieliby, aby funkcja była traktowana tak, jakby tylko dwie osoby zostały przekazane. Naprawdę nie widzę żadnego innego uzasadnionego celu przejścia w "niezdefiniowanym". –