Bạn cũng có thể sử dụng instanceof, ví dụ với tính đa hình cơ bản.
Đầu tiên tạo ra một lớp cha (bóng)
// superclass
function Ball() {
this.play = function() {
alert("Ball throw");
};
}
và bây giờ đối với một số lớp con (loại bóng)
// 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");
};
}
Cung cấp cho họ chức năng Ball, hay còn gọi là thiết lập lớp cha của họ thông qua nguyên mẫu
// set subclass functionality
Basketball.prototype = new Ball();
Soccerball.prototype = new Ball();
Baseball.prototype = new Ball();
Một số đa hình (tạo ra một loạt các quả bóng và chơi với tất cả, nhưng chơi dựa trên o loại n)
var bunchOfBalls = [new Baseball(), new Soccerball(), new Basketball()];
for (var i = 0; i < bunchOfBalls.length; i++) {
bunchOfBalls[i].play();
}
Bây giờ viết một chức năng mà phải mất một bóng nhưng chỉ muốn làm việc cho loại hình cụ thể của quả bóng (bắt chước chức năng quá tải, nhiều hơn hoặc ít hơn)
//overloading dependent upon type
function BasketbalOrBaseballOnlyPlay(aBall) {
if (aBall instanceof Basketball) {
//special basketball function
}
if (aBall instanceof Baseball) {
//special baseball function
}
}
Nếu aBall là một sân bóng rổ do đó aBall = new Basketball();
thì aBall instanceof Basketball
sẽ trả về true cho Bóng rổ và sai cho bóng chày nhưng đúng với Bóng.
Vì vậy, aBall instanceof Ball
sẽ trả về true vì Bóng rổ là Bóng.
See code live at http://jsfiddle.net/kLCPB/
Trong trường hợp người gọi đi một cuộc tranh luận thứ 3 nhưng giá trị của nó là * undefined * kiểm tra này sẽ thất bại. Có lẽ tốt hơn nếu hàm kiểm tra ** arguments.length ** thay thế. – NVRAM
Nếu người gọi sử dụng 'undefined' làm đối số thứ 3, tôi lấy nó để báo hiệu rằng họ muốn hàm được xử lý như thể chỉ có hai được truyền vào. Tôi không thực sự thấy bất kỳ mục đích hợp pháp nào khác để chuyển trong 'undefined'. –