Rumah hujung hadapan web tutorial js 通俗易懂解析JS原型与原型链

通俗易懂解析JS原型与原型链

Jun 04, 2018 am 11:07 AM
javascript menghuraikan

这次给大家带来通俗易懂解析JS原型与原型链,解析JS原型与原型链的注意事项有哪些,下面就是实战案例,一起来看一下。

Browser中的对象

浏览器中有哪些对象?ES中规定全局对象为global,而浏览器中规定全局对象为window。

在chrome控制台中输入window,我们就能看到window里有哪些内容。

下面的这些对象在window里都能找到。
如Object,Sring,Numbr,Boolean,Array,Date,Math,parseInt, parseFloat这些属性都是ES规定的必须有的对象。
如doucument,alert,prompt,atob等这些是浏览器中内置的属性。

这些对象都具有hash结构,如Object下,String下都有自己的属性和方法,都有相应的API调用。

简单类型和对象

例子如下:n1是简单类型,n2是对象。

var n1 = 'a'var n2 = new String('a')
n1.length
n1.hasOwnProperty('0')
n2.length
n2.hasOwnProperty('0')
n1.xxx = 2n1.xxx // undefined
Salin selepas log masuk

区别

n1值是存储在stack中。n2赋值时,stack中建立一个地址,指向heap中,堆内存中新建了一个String类型的对象。能看到对象n2里有一些属性,还有prototype属性。

属性

n2是对象,里面有length属性,所以调用。n1只是字符串,为何也有length属性

可以这样理解:n1.length时,这时js会进行如下操作:var temp = new String(n1);n1.length;也就是使用属性,或方法时,会临时的在堆内存中新建一个对象,这个对象是相应的String类型,执行后,temp便被销毁。因此n1.xxx = 2操作不会报错,而再次n1.xxx显示undefined,因为此时n1在堆内存中的数据已经销毁了。

因此,js中,很少使用new一个新对象的方法,而是直接对变量进行赋值。

n2中的hasOwnProperty()

hasOwnProperty()是Object类型中的方法,Sting类型下并没有找到它,在哪找到它?

这里hasOwnProperty()是在n2.proto.proto里面。n2.proto指向的是String.prototype,而String.prototype.proto最后指向Object.prototype。String是一种原型,Object也是一种原型。Object.prototype中存放了所有Object类型的公共属性。

以这种方式,能有效的节省空间,避免每个对象里面都记录很多的属性,一个object里没有的属性,就到proto指向的对象里面寻找。而指向的地方通常是某个原型的prototype。

去哪里找 proto和prototype

var n = new Number(1)var s= new String('1')var o= new Object()
Salin selepas log masuk

以上几种方式都能看成 var 对象 = 函数()的形式。
归纳出,对象.proto =函数.prototype。

访问 proto

proto是相对于对象来说,找爸爸,看是谁生成的对象。对n来说,爸爸是Number,就去Number.prototype里面寻找。Number里也有proto,访问时,到它的爸爸Object里面寻找。

Function
String.proto === Function.prototype //true
Salin selepas log masuk

函数也能看作是对象,String,Object,Number都是对象,也都是函数。因为之前用到了new String(),所以这是函数,函数return结果的数据类型为object。String的爸爸便是Function。

Function.proto === Function.prototype //trueFunction.prototype.proto === Object.prototype //trueFunction.proto.proto === Object.prototype //true
Salin selepas log masuk

当把函数Function看作是由Function方法生成的对象时,
即var Function = new Function()
便能理解 Function.proto === Function.prototype

Fuction的类型是function,它是由Function构造出来的。关系从上图可以看出来。new String()时,String的类型也是function,String.proto指向的就是Function.prototype。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

JS中怎样避免特性与浏览器推断

JS门面模式使用案例详解

Atas ialah kandungan terperinci 通俗易懂解析JS原型与原型链. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Menyelam mendalam tentang maksud dan penggunaan kod status HTTP 460 Menyelam mendalam tentang maksud dan penggunaan kod status HTTP 460 Feb 18, 2024 pm 08:29 PM

Analisis mendalam tentang peranan dan senario aplikasi kod status HTTP 460 Kod status HTTP adalah bahagian yang sangat penting dalam pembangunan web dan digunakan untuk menunjukkan status komunikasi antara klien dan pelayan. Antaranya, kod status HTTP 460 ialah kod status yang agak istimewa Artikel ini akan menganalisis secara mendalam peranan dan senario aplikasinya. Definisi kod status HTTP 460 Takrif khusus kod status HTTP 460 ialah "ClientClosedRequest", yang bermaksud bahawa klien menutup permintaan. Kod status ini digunakan terutamanya untuk menunjukkan

iBatis dan MyBatis: Analisis Perbandingan dan Kelebihan iBatis dan MyBatis: Analisis Perbandingan dan Kelebihan Feb 18, 2024 pm 01:53 PM

iBatis dan MyBatis: Analisis Perbezaan dan Kelebihan Pengenalan: Dalam pembangunan Java, ketekunan adalah keperluan biasa, dan iBatis dan MyBatis ialah dua rangka kerja kegigihan yang digunakan secara meluas. Walaupun mereka mempunyai banyak persamaan, terdapat juga beberapa perbezaan dan kelebihan utama. Artikel ini akan memberikan pembaca pemahaman yang lebih komprehensif melalui analisis terperinci tentang ciri, penggunaan dan kod sampel kedua-dua rangka kerja ini. 1. Ciri iBatis: iBatis ialah rangka kerja kegigihan yang lebih lama yang menggunakan fail pemetaan SQL.

Penjelasan terperinci tentang ralat Oracle 3114: Cara menyelesaikannya dengan cepat Penjelasan terperinci tentang ralat Oracle 3114: Cara menyelesaikannya dengan cepat Mar 08, 2024 pm 02:42 PM

Penjelasan terperinci tentang ralat Oracle 3114: Bagaimana untuk menyelesaikannya dengan cepat, contoh kod khusus diperlukan Semasa pembangunan dan pengurusan pangkalan data Oracle, kami sering menghadapi pelbagai ralat, antaranya ralat 3114 adalah masalah yang agak biasa. Ralat 3114 biasanya menunjukkan masalah dengan sambungan pangkalan data, yang mungkin disebabkan oleh kegagalan rangkaian, pemberhentian perkhidmatan pangkalan data atau tetapan rentetan sambungan yang salah. Artikel ini akan menerangkan secara terperinci punca ralat 3114 dan cara menyelesaikan masalah ini dengan cepat, dan melampirkan kod tertentu

Analisis makna dan penggunaan titik tengah dalam PHP Analisis makna dan penggunaan titik tengah dalam PHP Mar 27, 2024 pm 08:57 PM

[Analisis makna dan penggunaan titik tengah dalam PHP] Dalam PHP, titik tengah (.) ialah operator yang biasa digunakan untuk menyambung dua rentetan atau sifat atau kaedah objek. Dalam artikel ini, kami akan menyelami makna dan penggunaan titik tengah dalam PHP, menggambarkannya dengan contoh kod konkrit. 1. Operator titik tengah rentetan Concatenate Penggunaan yang paling biasa dalam PHP adalah untuk menggabungkan dua rentetan. Dengan meletakkan . antara dua rentetan, anda boleh menyambungkannya untuk membentuk rentetan baharu. $string1=&qu

Parsing Wormhole NTT: rangka kerja terbuka untuk sebarang Token Parsing Wormhole NTT: rangka kerja terbuka untuk sebarang Token Mar 05, 2024 pm 12:46 PM

Wormhole ialah peneraju dalam kebolehkendalian blockchain, memfokuskan pada mencipta sistem terdesentralisasi yang berdaya tahan, kalis masa hadapan yang mengutamakan pemilikan, kawalan dan inovasi tanpa kebenaran. Asas visi ini ialah komitmen terhadap kepakaran teknikal, prinsip etika dan penjajaran komuniti untuk mentakrifkan semula landskap kebolehoperasian dengan kesederhanaan, kejelasan dan rangkaian luas penyelesaian berbilang rantaian. Dengan peningkatan bukti pengetahuan sifar, penyelesaian penskalaan dan piawaian token yang kaya dengan ciri, rantaian blok menjadi lebih berkuasa dan kesalingoperasian menjadi semakin penting. Dalam persekitaran aplikasi yang inovatif ini, sistem tadbir urus baharu dan keupayaan praktikal membawa peluang yang belum pernah berlaku sebelum ini kepada aset merentas rangkaian. Pembina protokol kini bergelut dengan cara untuk beroperasi dalam pelbagai rantaian yang muncul ini

Analisis ciri baharu Win11: Bagaimana untuk melangkau log masuk ke akaun Microsoft Analisis ciri baharu Win11: Bagaimana untuk melangkau log masuk ke akaun Microsoft Mar 27, 2024 pm 05:24 PM

Analisis ciri baharu Win11: Cara melangkau log masuk ke akaun Microsoft Dengan keluaran Windows 11, ramai pengguna mendapati ia membawa lebih banyak kemudahan dan ciri baharu. Walau bagaimanapun, sesetengah pengguna mungkin tidak suka sistem mereka terikat pada akaun Microsoft dan ingin melangkau langkah ini. Artikel ini akan memperkenalkan beberapa kaedah untuk membantu pengguna melangkau log masuk ke akaun Microsoft dalam Windows 11 dan mencapai pengalaman yang lebih peribadi dan autonomi. Mula-mula, mari kita fahami sebab sesetengah pengguna enggan log masuk ke akaun Microsoft mereka. Di satu pihak, sesetengah pengguna bimbang bahawa mereka

Analisis fungsi eksponen dalam bahasa C dan contoh Analisis fungsi eksponen dalam bahasa C dan contoh Feb 18, 2024 pm 03:51 PM

Analisis terperinci dan contoh fungsi eksponen dalam bahasa C Pengenalan: Fungsi eksponen ialah fungsi matematik biasa, dan terdapat fungsi perpustakaan fungsi eksponen sepadan yang boleh digunakan dalam bahasa C. Artikel ini akan menganalisis secara terperinci penggunaan fungsi eksponen dalam bahasa C, termasuk prototaip fungsi, parameter, nilai pulangan, dsb. dan memberikan contoh kod khusus supaya pembaca dapat memahami dan menggunakan fungsi eksponen dengan lebih baik. Teks: Fungsi perpustakaan fungsi eksponen math.h dalam bahasa C mengandungi banyak fungsi yang berkaitan dengan eksponen, yang paling biasa digunakan ialah fungsi exp. Prototaip fungsi exp adalah seperti berikut

Apache2 tidak boleh menghuraikan fail PHP dengan betul Apache2 tidak boleh menghuraikan fail PHP dengan betul Mar 08, 2024 am 11:09 AM

Disebabkan oleh keterbatasan ruang, berikut ialah artikel ringkas: Apache2 ialah perisian pelayan web yang biasa digunakan, dan PHP ialah bahasa skrip bahagian pelayan yang digunakan secara meluas. Dalam proses membina tapak web, kadangkala anda menghadapi masalah bahawa Apache2 tidak dapat menghuraikan fail PHP dengan betul, menyebabkan kod PHP gagal dilaksanakan. Masalah ini biasanya disebabkan oleh Apache2 tidak mengkonfigurasi modul PHP dengan betul, atau modul PHP tidak serasi dengan versi Apache2. Secara umumnya terdapat dua cara untuk menyelesaikan masalah ini, satu

See all articles