Rumah hujung hadapan web tutorial js javascript对象的property和prototype关系

javascript对象的property和prototype关系

Dec 14, 2016 pm 03:56 PM

ECMAScript可以识别两种类型的对象,一种叫做Native Object属于语言范畴;一种叫做Host Object,由运行环境提供例如document对象,Dom Node等 
Native objects是一种松散的结构并且可以动态的增加属性(property),所有的属性都有一个名字和一个值,这个值可以是另一个对象的引用或者是内建的数据类型(String, Number, Boolean, Null 或者 Undefined) 
下面的这个简单的例子描述了一个javascript对象是如何设置一个属性的值和如何读取属性的值的。

赋值操作 
一个对象的属性的创建非常简单,直接通过赋值操作就可以完成属性的创建。


代码
var objectRef = new Object(); //create a generic javascript object.   

一个名为testNumber的属性可以这样创建。

代码
objectRef.testNumber = 5;    
/* - or:- */   
objectRef["testNumber"] = 5;   

如果复制的属性名称已经存在那么不会再次创建这个属性,赋值操作仅仅是重新设置属性的值

代码
objectRef.testNumber = 8;    
/* - or:- */   
objectRef["testNumber"] = 8;   


js对象的原型(prototype)自己本身也可以是对象,也可以有属性(property),对于js对象的(prototype)的赋值操作跟普通对象属性的创建 
没什么不同。

取值操作 
在取值操作中property和prototype就不一样了,先看最简单的property取值操作。

代码
/*为一个对象的属性赋值,如果这个对象没有这个属性,那么在赋值操作后,这个对象就有这个属性了 */   
objectRef.testNumber = 8;    
/* 读出这个属性的值 */   
var val = objectRef.testNumber;    
   
/* 现在val 就得到了刚才赋予objectRef的值8了*/  

prototype揭密

但是所有的对象都可以有prototypes, prototypes自己也是对象,那么他也可以有prototypes,这样循环下去就形成了一个prototype链, 
这个链当他遇到链中队形的prototype是null时中止。(Object的默认的prototype是null)

代码
var objectRef = new Object(); //create a generic javascript object.   

创建一个新的js对象,这时这个对象的prototype是Null,所以objectRef的prototype链只包含一个对象Object.prototype 
我们在看下面的代码

代码
/* 构建MyObject1这个类型的构造函数   
   MyObject1 - type.   
*/   
function MyObject1(formalParameter){    
    /* 为者对象创建一个属性名字叫testNumber   
    */   
    this.testNumber = formalParameter;    
}    
   
/* 构建MyObject2这个类型的构造函数   
   MyObject2 - type:-   
*/   
function MyObject2(formalParameter){    
   /* 为者对象创建一个属性名字叫testString*/   
    this.testString = formalParameter;    
}    
   
/* 下一步的操作会用MyObject1对象替换掉MyObject2默认的prototype属性*/   
MyObject2.prototype = new MyObject1( 8 );    
   
/* 最后我们创建MyObject2类型的一个对象*/   
   
var objectRef = new MyObject2( "String_Value" );   

objectRef这个MyObject2类型的对象有一个prototype的链,链中的第一个对象是MyObject1对象,MyObject1对象也有prototype, 
这个prototype是Object默认的prototype,Object.prototype的prototype是null,至此这条prototype链结束。 
当一个取值操作发生时,objectRef 的整个prototype链就开始工作

代码
var val = objectRef.testString;   

objectRef这个对象的有一个属性叫做testString,那么这句代码会把testString的值赋给val

代码
var val = objectRef.testNumber;   

在objectRef这个对象里并没有testNumber这个属性,但是val却的到了值8,而不是undefine,这是因为解释器在没有在当前对象找到要找 
的属性后,就会去检查这个对象的prototype,objectRef的prototype是MyObject1对象,这个对象有testNumber这个属性,所以val得到8这个值。

代码
var val = objectRef.toString;   

现在val是个function的引用,这个function是Object.prototype的property,由于MyObject1和MyObject2都没有定义toString这个property 
所以Object.prototype返回。

代码
var val = objectRef.madeUpProperty;   

最后val是undefined,因为MyObject1和MyObject2,还有Object都没有定义madeUpProperty这个property,所以得到的是undefine.
 

读操作会读取在obj自己和prototype 链上发现的第一个同名属性值 
写操作会为obj对象本身创建一个同名属性(如果这个属性名不存在 
这就意味着objectRef.testNumber = 3会在objectRef对象上创建一个property,名字是testNumber,当下一次在要读取testNumber时 
propertype链就不会工作,仅仅会得到objectRef的property 3,而MyObject1的testNumber属性并不会被修改。下面的代码可以验证


代码
/* 构建MyObject1这个类型的构造函数   
   MyObject1 - type.   
*/   
function MyObject1(formalParameter){    
    /* 为者对象创建一个属性名字叫testNumber   
    */   
    this.testNumber = formalParameter;    
}    
   
/* 构建MyObject2这个类型的构造函数   
   MyObject2 - type:-   
*/   
function MyObject2(formalParameter){    
   /* 为者对象创建一个属性名字叫testString*/   
    this.testString = formalParameter;    
}    
   
/* 下一步的操作会用MyObject1对象替换掉MyObject2默认的prototype属性*/   
var obj1 = new MyObject1( 8 );    
MyObject2.prototype = obj1;    
   
/* 最后我们创建MyObject2类型的一个对象*/   
   
var objectRef = new MyObject2( "String_Value" );    
   
alert(objectRef.testNumber);    
objectRef.testNumber = 5;    
alert(objectRef.testNumber);    
alert(obj1.testNumber);    

 更多相关文章请关注PHP中文网(www.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

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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 pm 02:54 PM

Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian Pengenalan: Dengan perkembangan teknologi yang berterusan, teknologi pengecaman pertuturan telah menjadi bahagian penting dalam bidang kecerdasan buatan. Sistem pengecaman pertuturan dalam talian berdasarkan WebSocket dan JavaScript mempunyai ciri kependaman rendah, masa nyata dan platform merentas, dan telah menjadi penyelesaian yang digunakan secara meluas. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian.

WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata Dec 17, 2023 pm 05:30 PM

WebSocket dan JavaScript: Teknologi utama untuk merealisasikan sistem pemantauan masa nyata Pengenalan: Dengan perkembangan pesat teknologi Internet, sistem pemantauan masa nyata telah digunakan secara meluas dalam pelbagai bidang. Salah satu teknologi utama untuk mencapai pemantauan masa nyata ialah gabungan WebSocket dan JavaScript. Artikel ini akan memperkenalkan aplikasi WebSocket dan JavaScript dalam sistem pemantauan masa nyata, memberikan contoh kod dan menerangkan prinsip pelaksanaannya secara terperinci. 1. Teknologi WebSocket

Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Dec 17, 2023 pm 12:09 PM

Pengenalan kepada cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata: Dengan populariti Internet dan kemajuan teknologi, semakin banyak restoran telah mula menyediakan perkhidmatan pesanan dalam talian. Untuk melaksanakan sistem pesanan dalam talian masa nyata, kami boleh menggunakan teknologi JavaScript dan WebSocket. WebSocket ialah protokol komunikasi dupleks penuh berdasarkan protokol TCP, yang boleh merealisasikan komunikasi dua hala masa nyata antara pelanggan dan pelayan. Dalam sistem pesanan dalam talian masa nyata, apabila pengguna memilih hidangan dan membuat pesanan

Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 am 09:39 AM

Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian Dalam era digital hari ini, semakin banyak perniagaan dan perkhidmatan perlu menyediakan fungsi tempahan dalam talian. Adalah penting untuk melaksanakan sistem tempahan dalam talian yang cekap dan masa nyata. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian dan memberikan contoh kod khusus. 1. Apakah itu WebSocket? WebSocket ialah kaedah dupleks penuh pada sambungan TCP tunggal.

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Dec 17, 2023 pm 05:13 PM

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Pengenalan: Hari ini, ketepatan ramalan cuaca sangat penting kepada kehidupan harian dan membuat keputusan. Apabila teknologi berkembang, kami boleh menyediakan ramalan cuaca yang lebih tepat dan boleh dipercayai dengan mendapatkan data cuaca dalam masa nyata. Dalam artikel ini, kita akan mempelajari cara menggunakan teknologi JavaScript dan WebSocket untuk membina sistem ramalan cuaca masa nyata yang cekap. Artikel ini akan menunjukkan proses pelaksanaan melalui contoh kod tertentu. Kami

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Bagaimana untuk menggunakan insertBefore dalam javascript Bagaimana untuk menggunakan insertBefore dalam javascript Nov 24, 2023 am 11:56 AM

Penggunaan: Dalam JavaScript, kaedah insertBefore() digunakan untuk memasukkan nod baharu dalam pepohon DOM. Kaedah ini memerlukan dua parameter: nod baharu untuk dimasukkan dan nod rujukan (iaitu nod di mana nod baharu akan dimasukkan).

JavaScript dan WebSocket: Membina sistem pemprosesan imej masa nyata yang cekap JavaScript dan WebSocket: Membina sistem pemprosesan imej masa nyata yang cekap Dec 17, 2023 am 08:41 AM

JavaScript ialah bahasa pengaturcaraan yang digunakan secara meluas dalam pembangunan web, manakala WebSocket ialah protokol rangkaian yang digunakan untuk komunikasi masa nyata. Menggabungkan fungsi berkuasa kedua-duanya, kami boleh mencipta sistem pemprosesan imej masa nyata yang cekap. Artikel ini akan memperkenalkan cara untuk melaksanakan sistem ini menggunakan JavaScript dan WebSocket, dan memberikan contoh kod khusus. Pertama, kita perlu menjelaskan keperluan dan matlamat sistem pemprosesan imej masa nyata. Katakan kita mempunyai peranti kamera yang boleh mengumpul data imej masa nyata

See all articles