Вы также можете использовать instanceof, например, с основным полиморфизмом.
Сначала нужно создать суперкласс (мяч)
// superclass
function Ball() {
this.play = function() {
alert("Ball throw");
};
}
и теперь для некоторых подклассов (типов шаров)
// 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");
};
}
Дайте им функциональность мяча, иначе установить их суперкласса с помощью прототипа
// set subclass functionality
Basketball.prototype = new Ball();
Soccerball.prototype = new Ball();
Baseball.prototype = new Ball();
Некоторые полиморфизм (создайте кучу шаров и играйте с ними всеми, но играйте на основе o п тип)
var bunchOfBalls = [new Baseball(), new Soccerball(), new Basketball()];
for (var i = 0; i < bunchOfBalls.length; i++) {
bunchOfBalls[i].play();
}
Теперь напишем функцию, которая принимает мяч, но только нужно работать для конкретного типа шаров (мнемосхема функция перегрузки, более или менее)
//overloading dependent upon type
function BasketbalOrBaseballOnlyPlay(aBall) {
if (aBall instanceof Basketball) {
//special basketball function
}
if (aBall instanceof Baseball) {
//special baseball function
}
}
Если aBall является баскетбол так что aBall = new Basketball();
, то aBall instanceof Basketball
вернет true для баскетбола и фальшивый для бейсбола, но верно для Ball.
Так что aBall instanceof Ball
вернется, потому что баскетбол - это мяч.
See code live at http://jsfiddle.net/kLCPB/
В том случае, если абонент переходит на 3-й аргумент, но его значение не определено * * этот тест потерпит неудачу. Вероятно, лучше, если функция проверяет ** arguments.length **. – NVRAM
Если вызывающий абонент использует 'undefined' в качестве 3-го аргумента, я бы принял это, чтобы сообщить, что они хотели бы, чтобы функция обрабатывалась так, как будто было передано только два. Я не вижу никакой другой законной цели для передачи в 'undefined'. –