Cara menggunakan prototype in javascript

Properti "prototype" adalah properti yang banyak digunakan oleh Javascript itu sendiri. Semua konstruktor fungsi menggunakannya.

Pertama kita akan melihat lebih lengkapnya dan bagaimana cara menggunakannya untuk menambah kemampuan dari objek-objek bawaan.

Object.prototype

katakan kita mengeluarkan sebuah objek kosong:

let obj = {};
alert[ obj ]; // "[object Object]" ?

Dimanakah kode yang menghasilkan string "[object Object]"? Itu adalah metode bawaan toString, tapi diamanakah itu berara? obj tidak berisi apapun!

…Tapi notasi pendek dari obj = {} sama seperti obj = new Object[], dimana Object adalah fungsi konstruktor objek bawaan, dengan properti prototypenya sendiri yang mereferensi sebuah objek besar toString dan metode lainnya.

Inilah yang terjadi:

Ketika new Object[] dipanggil [atau sebuah objek literal {...} dibuat], [[Prototype]]nya disetel ke Object.prototype mengikuti aturan yang telah kita bahas di bab sebelumnya:

Jadi ketika obj.toString[] dipanggil metodenya dibawa dari Object.prototype.

Kita bisa periksa seperti ini:

let obj = {};

alert[obj.__proto__ === Object.prototype]; // true

alert[obj.toString === obj.__proto__.toString]; //true
alert[obj.toString === Object.prototype.toString]; //true

Ingat bahwa disana sudah tidak ada lagi [[Prototype]] didalam rantai diatas Object.prototype:

alert[Object.prototype.__proto__]; // null

prototype bawaan lainnya

Objek bawaan lainnya seperti Array, Date, Function dan lainnya juga tetap menyimpan metode didalam prototype.

Contoh, ketika kita membuat sebuah array [1, 2, 3], konstruktor bawaan new Array[] digunakan secara internal. Jadi Array.prototype menjadi prototype miliknya dan menyediakan metode-metode. Itu akan membuatnya menjadi efisien dalam penggunaan memori.

Sebagaimana spesifikasinya, semua prototype bawaan memiliki Object.prototype diatasnya. Itulah kenapa beberapa orang berkata bahwa “semuanya diwarisi dari objek”.

Ini adalah gambar keseluruhan [memasangkan 3 fungsi]:

Sekarang kita cek prototypenya secara manual:

let arr = [1, 2, 3];

// apakah diwarisi dari Array.prototype?
alert[ arr.__proto__ === Array.prototype ]; // true

// maka dari Object.prototype?
alert[ arr.__proto__.__proto__ === Object.prototype ]; // true

// dan null diatasnya.
alert[ arr.__proto__.__proto__.__proto__ ]; // null

Beberapa metode didalam prototype mungkin tumpang tindih, contoh, Array.prototype memiliki toStringnya sendiri yang menyusun elemen yang dipisahkan dengan koma:

let arr = [1, 2, 3]
alert[arr]; // 1,2,3 

Bài mới nhất

Chủ Đề