Rumah > hujung hadapan web > Soal Jawab bahagian hadapan > Adakah fungsi JavaScript biasa mempunyai prototaip?

Adakah fungsi JavaScript biasa mempunyai prototaip?

青灯夜游
Lepaskan: 2022-10-31 17:51:21
asal
1957 orang telah melayarinya

Fungsi biasa JavaScript mempunyai prototaip. Dalam JavaScript, mana-mana fungsi mempunyai atribut prototaip, yang menunjuk kepada objek prototaip fungsi tersebut. Fungsi prototaip sebenarnya adalah untuk menyediakan "kawasan awam" untuk kelas (fungsi) Sifat dan kaedah yang diisytiharkan dalam kawasan awam ini boleh diakses oleh semua objek yang dicipta melalui kelas ini, yang boleh mengurangkan penggunaan memori.

Adakah fungsi JavaScript biasa mempunyai prototaip?

Persekitaran pengendalian tutorial ini: sistem Windows 7, versi JavaScript 1.8.5, komputer Dell G3.

Atribut prototaip (prototaip) fungsi

1 Selagi kita mencipta fungsi, fungsi tersebut akan memperoleh atribut prototaip secara automatik, yang menghala ke objek prototaip fungsi tersebut.

Adakah fungsi JavaScript biasa mempunyai prototaip?

Mencipta fungsi fn secara automatik memperoleh atribut prototaip, iaitu objek yang merupakan objek prototaip fungsi Kita dapat melihat bahawa objek prototaip akan mempunyai atribut pembina secara lalai. Atribut ini Ia menunjuk kepada fungsi itu sendiri, iaitu fn.

Fungsi prototaip sebenarnya adalah untuk menyediakan [kawasan awam] untuk kelas (fungsi) Sifat dan kaedah yang diisytiharkan dalam kawasan awam ini boleh diakses oleh semua objek yang dicipta melalui kelas ini. Kurangkan penggunaan memori.

2. Atribut prototaip fungsi ialah objek

typeof fn.prototype  //"object"
Salin selepas log masuk

Atribut prototaip ialah objek, jadi apa lagi yang boleh kita gunakan selain mengakses atribut dan kaedah yang sepadan dalam bentuk objek biasa? Jawapannya ialah apabila fungsi bertindak sebagai 'pembina', kami menggunakan 'kata kunci baharu untuk mencipta contoh' untuk mengakses sifat dan kaedah yang sepadan dalam atribut prototaip

function Fn(){
    this.name = "CJF"}
Fn.prototype.name="CJF1";
Fn.prototype.getName = function(){
    return this.name;
}var f = new Fn();
f.name;//输出 'CJF'f.getName(); //输出 'CJF'Fn.prototype.getName();//输出 'CJF1'
Salin selepas log masuk

Anda boleh melihat bahawa apabila fungsi mencipta contoh sebagai pembina, contoh boleh memanggil kaedah pada objek prototaip Pada masa ini, ini menunjukkan kepada f contoh f mengakses atribut nama kerana ia mempunyai atribut namanya sendiri dan boleh diakses oleh itu, jika 'CJF' adalah output dan tidak mempunyai atribut nama, enjin skrip akan menanyakan untuk prototaip pembina yang digunakan untuk mencipta objek semasa ( bersamaan dengan kami mengakses f.constructor.prototype) dan mencari prototaip pembina Jika objek mempunyai atribut nama, 'CJF1' akan dikembalikan. (f dan objek prototaipnya kedua-duanya mempunyai atribut nama, dan atribut objek sendiri mempunyai keutamaan yang lebih tinggi daripada objek prototaip)

function Fn(){}
Fn.prototype.name="CJF1";
Fn.prototype.getName = function(){
    return this.name;
}var f = new Fn();
f.name;//输出 'CJF1'f.getName(); //输出 'CJF1'Fn.prototype.getName();//输出 'CJF1'
Salin selepas log masuk

3 "masa nyata". objek prototaip prototaip

Memandangkan semua objek dalam JavaScript dilalui dengan rujukan, setiap kali kami mencipta contoh fungsi baharu, kami tidak mempunyai salinannya sendiri prototaip, dan Maksudnya, objek prototaip dikongsi oleh semua kejadian Jika kita mengubah suai objek prototaip sesuatu fungsi, prototaip semua objek contoh yang dicipta oleh fungsi itu akan berubah dengan sewajarnya.

function Fn(){}
Fn.prototype.name="CJF1";
Fn.prototype.getName = function(){
    return this.name;
}var f = new Fn();
f.name;//输出 'CJF1'f.getName(); //输出 'CJF1'f.getAge();//此时没有实例f并没有getAge方法  浏览器会报错 Uncaught TypeError: f.getAge is not a function//加上后面的就可以正常访问了Fn.prototype.getAge = function(){
    return 20;
}
f.getAge();//20
Salin selepas log masuk

4. Rantaian prototaip
Tadi kami mengetahui bahawa apabila sifat objek sendiri adalah sama dengan sifat prototaip, sifatnya sendiri mempunyai keutamaan yang lebih tinggi daripada sifat prototaip, tetapi apabila objek itu sendiri tidak mempunyai sifat yang ingin kita akses Apabila harta atau kaedah ditentukan, harta yang hendak diakses akan dicari di sepanjang prototaip (rantai prototaip) bagi pembina objek semasa. harta yang sepadan akan dikembalikan Jika harta yang sepadan tidak dijumpai, tidak ditentukan akan dikembalikan Namun, Jika kaedah yang hendak diakses tidak dijumpai, ralat akan dilaporkan (kerana tiada kaedah sedemikian tetapi kaedah itu masih perlu. dilaksanakan, ralat dilaporkan).

function Fn(){}
Fn.prototype.name="CJF1";
Fn.prototype.getName = function(){
    return this.name;
}var f = new Fn();
f.constructor.prototype == Fn.prototype //true
Salin selepas log masuk

Adakah fungsi JavaScript biasa mempunyai prototaip?

Daripada gambar di atas kita dapat melihat contoh f._proto_ (dua garis bawah sebelum dan selepas) mata to ialah objek, dan objek ini ialah Fn.prototype Apabila kita mengakses atribut atau kaedah yang tidak dimiliki oleh f, kita akan mengikuti pautan rahsia ini (_proto_<.>) Cari perkara yang ingin kami akses, dan sentiasa cari Object.prototype Setelah ditemui, sifat yang sepadan akan dikembalikan Jika sifat yang sepadan tidak dijumpai, tidak ditentukan akan dikembalikan tidak dijumpai, ralat akan dilaporkan. Pautan rahsia ini hanya digunakan untuk pembelajaran dan penyahpepijatan, bukan untuk pembangunan sebenar (ia adalah disyorkan untuk menggunakan kaedah Object.getPrototypeOf).

Adakah fungsi JavaScript biasa mempunyai prototaip?

Jika kita memanggil f.toString(), kerana instance f tidak mempunyai kaedah toString, ia akan mencari Object.prototype di sepanjang pautan rahsia, kerana Object ialah Kelas induk peringkat atas, objek lain secara langsung atau tidak diwarisi daripadanya Selepas pautan rahsia menemuinya, ia akan kembali jika terdapat hasil, jika tidak ia akan kembali tidak ditentukan atau melaporkan ralat. Jadi Object.prototype.

_proto_ = null muncul.

[Cadangan berkaitan:

tutorial video javascript, Video pengaturcaraan]

Atas ialah kandungan terperinci Adakah fungsi JavaScript biasa mempunyai prototaip?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan