Pada dasarnya JavaScript merupakan dynamic language programming yang hanya tidak type-safe. Dalam JavaScript hanya mengenal lima macam tipe data string, number, boolean, function dan object. Setiap variable adalah variant yaitu dapat diisi dengan tipe data apa saja.
Contoh:
var i = 0;
Variabel i juga dapat diisi dengan nilai string.
var i = 0;
i = "nilai i";
Begitu pula dalam sebuah parameter fungsi, parameter dapat diisi dengan berbagai macam time data dan itu memang diperbolehkan dalam javascript.
function Penambahan(x, y) {
return x + y;
}
Pada contoh kode di atas, nilai x dan y bisa diisi dengan angka (baik bulan / integer maupun pecahan / float) dan juga bisa diisi dengan string.
function Penambahan(x, y) {
return x + y;
}
Penambahan(1, 2); // menghasilkan nilai 3
Penambahan("1", "2"); // menghasilkan nilai string "12"
Dari contoh di atas, semua jenis data dapat masuk kedalam fungsi tanpa diperiksa tipe datanya. Bagaimana dengan overloading seperti yang umum dipake oleh bahasa pembrograman yang telah mendukung object oriented? Dalam JavaScript tidak mendukung overloading secara internal tapi dapat dilakukan sedikit trik supaya overloading dapat dilakukan pada JavaScript.
JavaScript memilika satu keyword typeof untuk mengecek tipe data apa yang terdapat dalam variable. Fungsi penambahan di sebelumnya dapat dioverload seperti kode di bawah.
function Penambahan(x, y) {
// pengecekan apakah kedua parameter terisi atau tidak
if ((typeof x == "undefined") || (typeof y == "undefined)) {
alert("Parameter x dan y harus diisi");
return null;
}
// Jika x dan y adalah string
if ((typeof x == "string") && (typeof y == "string")) {
return x + " plus " + y;
}
// Overload x dan y adalah number
if ((typeof x == "number") && (typeof y == "number")) {
return x + y;
} else {
return null;
}
}
Penambahan(1, 2); // menghasilkan nilai 3
Penambahan("1", "2"); // menghasilkan nilai string "1 plus 2"
Keyword typeof hanya dapat mengecek object, function, boolean, string, dan number. Array dan object yang terdefinisi tidak dapat dicek melalui keyword ini. Untuk mengatasi masalah ini dapat digunakan contructor dari masing-masing variabel. Fungsi penambahan di dapat diganti dengan.
function Penambahan(x, y) {
// Jika x dan y adalah string
if ((typeof.constructor == String) && (y.constructor == String)) {
return x + " plus " + y;
}
// Overload x dan y adalah number
if ((x.constructor == Number) && (y.constructor == Number)) {
return x + y;
}
// Overload x dan y adalah array
if (x.contructor == Array) && (y.constructor == Array) {
var ret = [];
var i=0;
for (i=0; i < x.length; i++) {
ret.push(x[i]+y[i]);
}
return ret;
} else {
return null;
}
}
var array
Penambahan(1, 2); // menghasilkan nilai 3
Penambahan("1", "2"); // menghasilkan nilai string "1 plus 2"
Penambahan([1, 2, 3], [2, 4, 5]); // menghasilkan nilai array [3, 6, 8]
Selain type-checking, dalam fungsi JavaScript, terdapat satu array variabel yaitu arguments yang berisi semua parameter yang dimasukkan. Karena arguments berupa array, maka kita dapat memasukkan berapapun jumlah parameter tanpa batas. Sebagai contoh.
function Penambahan() {
var ret = 0;
var i;
for (i=0; i arguments.length; i++) {
if (arguments[i].constructor == Number) {
ret += arguments[i];
}
}
return ret;
}
Penambahan(1, 2); // menghasilkan nilai 3
Penambahan(1, 2, 3); // menghasilkan nilai 6
Penambahan(1, 2, 3, "4"); // menghasilkan nilai 6 karena parameter "4" bertipe string
// Dalam fungsi selain number tidak masuk dalam perhitungan
Dengan type-checking dan variabel arguments, kita dapat membuat overloading function sebagaimana halnya bahasa pemprograman lain.
Demikian pemaparan singkat mengenai salah satu fitur pemprograman object oriented menggunakan javascript. Semoga tulisan ini bisa bermanfaat bagi semua.