JS模拟面向对象全解(二、类型与赋值)_javascript技巧
类型赋值类似变量传递的问题。
基本数据类型不必说,传值的。
var a=5;
var b=a;
b=3;
alert(a);//提示5
alert(b);//提示3
由此观之,发现改变b不会改变a,因为都是变量的值在来回传递,和变量本身没有关系。
对象类型,传址的。
var a=new Object();
a.x=5;
var b=a;
b.x=3;
alert(a.x);//提示3
alert(b.x);//提示3
这样,由于传址,所以b即是a,a即是b,互相改变。
如若还不清楚,再举个例子:
var a=new Object();
a.x=5;
var b=a;
alert(b.x);//提示5,b.x即a.x,都是5
a.x=3;//改a.x即改b.x,都是3了
alert(a.x);//提示3
alert(b.x);//提示3
不过,对象类型的属性互相赋值,就与对象类型没关系了,就和其属性的类型有关系。
属性是基本数据类型则传值,属性是对象类型则传址。举个例子吧,简单点:
var a=new Object();
a.x=5; var b=new Object();
b.x=a.x; b.x=3;
alert(a.x);//提示5
alert(b.x);//提示3
上面来回赋值的不过是两个不同对象的属性,都是互相孤立的,也都是基本数据类型,因此只是互相传值,不会互相影响。
var a=new Object();
a.x=5;
var b=a.x;
b=3;
alert(a.x);/提示/5
alert(b);//提示3
这也是一样,b这个基本数据类型与a的基本数据类型的属性x相互赋值,同样不会互相影响,只是互相传值。
可是,对象的属性如果也是对象类型,那就也是传址了。
var a=new Object();
a.x=new Object;
a.x.n=5;
var b=a.x;
alert(b.n);//提示5
b.n=3;//也就改了a.x的n
alert(a.x.n);//提示3
alert(b.n);//提示3
a对象的属性x,被定义为一个Object对象类型。因此b赋值为a.x时,他们就是互通的了,其实就是同一个了,可以互相影响、改变。
————
可是,如果我想让对象类型变量赋值时,只是拷贝属性,而不是达到“你就是我,我就是你”的境界、“同生共死”的高尚品格。怎么办?
木有什么特别好的办法,用下面这个函数吧。
var DeepCopy = function(destination, source)
{
for (var property in source)
{
var copy = source[property];
if ( destination === copy ) continue;
if ( typeof copy === "object" )
{
destination[property] = DeepCopy(destination[property] || {}, copy);
}
else
{
destination[property] = copy;
}
}
return destination;
}
用法
var a=new Object;
a.x=5;
a.y=3;
var b=new Object;
DeepCopy(b,a);
alert(b.x);//提示5
alert(b.y);//提示3
b.x=8;
alert(a.x);//提示5
看,修改了b.x却不能影响a.x了吧?
这个DeepCopy是个不错的函数。
上面实现了对象类型的模拟“传值”
那么怎么做才能模拟基本数据类型的“传址”?
就是用Array对象。
function change(a)
{
a[0]=5;
alert(a);//提示5
}
var x=[3];
alert(x);//提示3
change(x);
alert(x);//提示5
赋值为一个[xx],其实就是赋值为一个有数据的Array对象。这里就是利用含有一个元素的数组来模拟传址。因为数组是对象类型,传递时传址。
当然,你也可以用任意对象类型的属性来模拟。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cara menggunakan bahasa Go untuk melaksanakan pengaturcaraan dipacu peristiwa berorientasikan objek Pengenalan: Paradigma pengaturcaraan berorientasikan objek digunakan secara meluas dalam pembangunan perisian, dan pengaturcaraan dipacu peristiwa ialah model pengaturcaraan biasa yang merealisasikan aliran program melalui pencetusan dan pemprosesan peristiwa. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk melaksanakan pengaturcaraan dipacu peristiwa berorientasikan objek dan memberikan contoh kod. 1. Konsep pengaturcaraan dipacu peristiwa Pengaturcaraan dipacu acara ialah model pengaturcaraan berdasarkan peristiwa dan mesej, yang memindahkan kawalan aliran program kepada pencetus dan pemprosesan peristiwa. dalam acara didorong

Anotasi @JsonIdentityInfo digunakan apabila objek mempunyai hubungan ibu bapa-anak dalam perpustakaan Jackson. Anotasi @JsonIdentityInfo digunakan untuk menunjukkan identiti objek semasa bersiri dan penyahsirilan. ObjectIdGenerators.PropertyGenerator ialah kelas ruang letak abstrak yang digunakan untuk mewakili situasi di mana pengecam objek yang akan digunakan berasal daripada sifat POJO. Syntax@Target(value={ANNOTATION_TYPE,TYPE,FIELD,METHOD,PARAMETER})@Retention(value=RUNTIME)public

Bahasa Go menyokong pengaturcaraan berorientasikan objek melalui definisi jenis dan perkaitan kaedah. Ia tidak menyokong warisan tradisional, tetapi dilaksanakan melalui gubahan. Antara muka menyediakan ketekalan antara jenis dan membenarkan kaedah abstrak ditakrifkan. Kes praktikal menunjukkan cara menggunakan OOP untuk mengurus maklumat pelanggan, termasuk mencipta, mendapatkan, mengemas kini dan memadam operasi pelanggan.

Menganalisis Corak Flyweight dalam Pengaturcaraan Berorientasikan Objek PHP Dalam pengaturcaraan berorientasikan objek, corak reka bentuk ialah kaedah reka bentuk perisian yang biasa digunakan, yang boleh meningkatkan kebolehbacaan, kebolehselenggaraan dan kebolehskalaan kod. Corak flyweight ialah salah satu corak reka bentuk yang mengurangkan overhed memori dengan berkongsi objek. Artikel ini akan meneroka cara menggunakan mod flyweight dalam PHP untuk meningkatkan prestasi program. Apakah mod flyweight? Corak flyweight ialah corak reka bentuk struktur yang tujuannya adalah untuk berkongsi objek yang sama antara objek yang berbeza.

Amalan terbaik OOP dalam PHP termasuk konvensyen penamaan, antara muka dan kelas abstrak, pewarisan dan polimorfisme, dan suntikan kebergantungan. Kes praktikal termasuk: menggunakan mod gudang untuk mengurus data dan menggunakan mod strategi untuk melaksanakan pengisihan.

Bahasa Go menyokong pengaturcaraan berorientasikan objek, mentakrifkan objek melalui struct, mentakrifkan kaedah menggunakan penerima penunjuk, dan melaksanakan polimorfisme melalui antara muka. Ciri berorientasikan objek menyediakan penggunaan semula kod, kebolehselenggaraan dan enkapsulasi dalam bahasa Go, tetapi terdapat juga pengehadan seperti kekurangan konsep tradisional kelas dan pewarisan dan hantaran tandatangan kaedah.

Tiada konsep kelas dalam erti kata tradisional dalam Golang (bahasa Go), tetapi ia menyediakan jenis data yang dipanggil struktur, yang melaluinya ciri berorientasikan objek yang serupa dengan kelas boleh dicapai. Dalam artikel ini, kami akan menerangkan cara menggunakan struktur untuk melaksanakan ciri berorientasikan objek dan menyediakan contoh kod konkrit. Definisi dan penggunaan struktur Pertama, mari kita lihat definisi dan penggunaan struktur. Di Golang, struktur boleh ditakrifkan melalui kata kunci jenis dan kemudian digunakan di mana perlu. Struktur boleh mengandungi atribut

C# (CSharp) ialah bahasa pengaturcaraan berorientasikan objek yang berkuasa dan popular yang digunakan secara meluas dalam bidang pembangunan perisian. Semasa proses pembangunan C#, adalah sangat penting untuk memahami konsep asas dan prinsip reka bentuk pengaturcaraan berorientasikan objek (OOP). Pengaturcaraan berorientasikan objek ialah paradigma pengaturcaraan yang mengabstraksi perkara di dunia nyata menjadi objek dan melaksanakan fungsi sistem melalui interaksi antara objek. Dalam C#, kelas ialah blok binaan asas pengaturcaraan berorientasikan objek dan digunakan untuk menentukan sifat dan tingkah laku objek. Apabila membangunkan C#, terdapat beberapa prinsip reka bentuk yang penting
