kembali ke pelajaran

"instanceof" Aneh

pentingnya: 5

Pada kode dibawah, kenapa instanceof mengembalikan true? Dengan jelas kita dapat melihat a tidak dibuat oleh B().

function A() {}
function B() {}

A.prototype = B.prototype = {};

let a = new A();

alert( a instanceof B ); // true

Yah, memang terlihat aneh.

Tetapi instanceof tidak peduli dengan fungsinya, melainkan tentang prototype, yang cocok dengan rantai prototipe.

Dan di sini a.__proto__ == B.prototype, jadi instanceof mengembalikan true.

Jadi, dengan menggunakan logika instanceof, prototype sebenarnya mendefinisikan tipe, bukan fungsi konstruktor.