JS menyediakan beberapa objek, fungsi, dan konstruktor bawaan untuk kita program, seperti Matematika, parseInt, Objek, Array, dll. Ini semua terlihat dan dapat digunakan selama pemrograman. Misalnya, saya bisa menggunakan Objek baru atau Array baru.
Beberapa tidak terlihat dan hanya dapat disediakan oleh mesin dalam keadaan khusus. Jenis objek ini sering kali fungsinya berkurang. Ini beberapa
1. Jenis argumen
Tipe Argumen tidak boleh membuat objeknya secara manual oleh pemrogram, yaitu Anda tidak dapat membuat Argumen baru(). Ia memiliki dan hanya satu argumen objek
Copy kode kodenya sebagai berikut:
fungsi fungsi() {
console.log(argumen[0]) // 1
console.log(argumen.panjang) // 3
}
kesenangan (1, 2, 3)
Objek argumen dibuat ketika fungsi dipanggil dan hanya terlihat dan digunakan di dalam fungsi. Anda dapat melihat bahwa argumen sangat mirip dengan Array, elemen dapat diambil berdasarkan indeks, dan mereka juga memiliki atribut panjang. Tapi ini bukan Array. Ia tidak memiliki beberapa metode Array seperti push, pop, dll. Argumen didefinisikan dalam ES5 10.6.
2. Fungsi yang dikembalikan oleh bind sangatlah istimewa.
bind adalah metode baru yang ditambahkan oleh ES5 ke Function.prototype. Ini dipanggil langsung pada fungsi seperti call/apply. Ia mengembalikan fungsi dengan konteks dan parameter tertentu.
Copy kode kodenya sebagai berikut:
fungsi fungsi(umur) {
console.log('nama: ' + nama ini + ', karier: ' + umur)
}
var orang = {nama: 'John McCarthy'}
var f1 = func.bind(orang, 'ilmuwan komputer')
f1() // nama: John McCarthy, karir: ilmuwan komputer
Anda dapat melihat bahwa fungsi yang dikembalikan f1 dipanggil menggunakan tanda kurung seperti fungsi normal. Semuanya berfungsi dengan baik, tetapi kode berikut akan mengejutkan Anda
Copy kode kodenya sebagai berikut:
fungsi fungsi(umur) {
console.log('nama: ' + nama ini + ', karier: ' + umur)
}
var orang = {nama: 'John McCarthy'}
var f1 = func.bind(orang, 'ilmuwan komputer')
console.log(f1.prototype) // tidak terdefinisi
Dibandingkan dengan kode di atas, kalimat terakhir berbeda. f1() tidak dieksekusi, tetapi f1.prototype dicetak dan ternyata tidak terdefinisi.
Aneh? Bukankah setiap fungsi memiliki atribut prototype? Ini digunakan untuk mengimplementasikan pewarisan prototipe. Memang fungsi yang dikembalikan oleh bind itu spesial, tidak memiliki prototipe. Fungsi khusus ini dibuat oleh mesin JS dan tidak dapat diukur secara langsung oleh pemrogram klien melalui deklarasi fungsi atau fungsi.
Hal ini terlihat jelas pada spesifikasi ES5 15.3.4.5