Heim Web-Frontend js-Tutorial JS模拟面向对象全解(二、类型与赋值)_javascript技巧

JS模拟面向对象全解(二、类型与赋值)_javascript技巧

May 16, 2016 pm 06:04 PM
面向对象

类型赋值类似变量传递的问题。
基本数据类型不必说,传值的。

复制代码 代码如下:

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对象。这里就是利用含有一个元素的数组来模拟传址。因为数组是对象类型,传递时传址。
当然,你也可以用任意对象类型的属性来模拟。
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So implementieren Sie objektorientierte ereignisgesteuerte Programmierung mithilfe der Go-Sprache So implementieren Sie objektorientierte ereignisgesteuerte Programmierung mithilfe der Go-Sprache Jul 20, 2023 pm 10:36 PM

So verwenden Sie die Go-Sprache zum Implementieren der objektorientierten ereignisgesteuerten Programmierung. Einführung: Das objektorientierte Programmierparadigma wird häufig in der Softwareentwicklung verwendet. Die ereignisgesteuerte Programmierung ist ein gängiges Programmiermodell, das den Programmfluss durch Auslösen und Verarbeiten von realisiert Ereignisse. In diesem Artikel wird die Verwendung der Go-Sprache zur Implementierung objektorientierter ereignisgesteuerter Programmierung vorgestellt und Codebeispiele bereitgestellt. 1. Das Konzept der ereignisgesteuerten Programmierung Die ereignisgesteuerte Programmierung ist ein auf Ereignissen und Nachrichten basierendes Programmiermodell, das die Ablaufsteuerung des Programms auf das Auslösen und Verarbeiten von Ereignissen überträgt. in ereignisgesteuert

Welche Bedeutung hat die Annotation @JsonIdentityInfo mit Jackson in Java? Welche Bedeutung hat die Annotation @JsonIdentityInfo mit Jackson in Java? Sep 23, 2023 am 09:37 AM

Die Annotation @JsonIdentityInfo wird verwendet, wenn ein Objekt in der Jackson-Bibliothek eine Eltern-Kind-Beziehung hat. Die Annotation @JsonIdentityInfo wird verwendet, um die Objektidentität während der Serialisierung und Deserialisierung anzugeben. ObjectIdGenerators.PropertyGenerator ist eine abstrakte Platzhalterklasse, die zur Darstellung von Situationen verwendet wird, in denen der zu verwendende Objektbezeichner von einer POJO-Eigenschaft stammt. Syntax@Target(value={ANNOTATION_TYPE,TYPE,FIELD,METHOD,PARAMETER})@Retention(value=RUNTIME)public

Entdecken Sie die objektorientierte Programmierung in Go Entdecken Sie die objektorientierte Programmierung in Go Apr 04, 2024 am 10:39 AM

Die Go-Sprache unterstützt die objektorientierte Programmierung durch Typdefinition und Methodenzuordnung. Es unterstützt keine traditionelle Vererbung, sondern wird durch Komposition implementiert. Schnittstellen sorgen für Konsistenz zwischen Typen und ermöglichen die Definition abstrakter Methoden. Praxisbeispiele zeigen, wie OOP zum Verwalten von Kundeninformationen verwendet wird, einschließlich Vorgängen zum Erstellen, Abrufen, Aktualisieren und Löschen von Kunden.

Analyse des Flyweight-Musters in der objektorientierten PHP-Programmierung Analyse des Flyweight-Musters in der objektorientierten PHP-Programmierung Aug 14, 2023 pm 05:25 PM

Analyse des Flyweight-Musters in der objektorientierten PHP-Programmierung In der objektorientierten Programmierung ist das Entwurfsmuster eine häufig verwendete Software-Designmethode, die die Lesbarkeit, Wartbarkeit und Skalierbarkeit des Codes verbessern kann. Das Flyweight-Muster ist eines der Entwurfsmuster, das den Speicheraufwand durch die gemeinsame Nutzung von Objekten reduziert. In diesem Artikel wird untersucht, wie Sie den Flyweight-Modus in PHP verwenden, um die Programmleistung zu verbessern. Was ist der Fliegengewichtsmodus? Das Fliegengewichtsmuster ist ein strukturelles Entwurfsmuster, dessen Zweck darin besteht, dasselbe Objekt zwischen verschiedenen Objekten zu teilen.

Analyse der objektorientierten Funktionen der Go-Sprache Analyse der objektorientierten Funktionen der Go-Sprache Apr 04, 2024 am 11:18 AM

Die Go-Sprache unterstützt objektorientierte Programmierung, definiert Objekte über Strukturen, definiert Methoden mithilfe von Zeigerempfängern und implementiert Polymorphismus über Schnittstellen. Objektorientierte Funktionen ermöglichen die Wiederverwendung, Wartbarkeit und Kapselung von Code in der Go-Sprache, es gibt jedoch auch Einschränkungen wie das Fehlen traditioneller Konzepte von Klassen und Vererbung sowie Methodensignaturumwandlungen.

Erweiterte PHP-Funktionen: Best Practices in der objektorientierten Programmierung Erweiterte PHP-Funktionen: Best Practices in der objektorientierten Programmierung Jun 05, 2024 pm 09:39 PM

Zu den OOP-Best Practices in PHP gehören Namenskonventionen, Schnittstellen und abstrakte Klassen, Vererbung und Polymorphismus sowie Abhängigkeitsinjektion. Zu den praktischen Fällen gehören: Verwenden des Lagermodus zum Verwalten von Daten und Verwenden des Strategiemodus zum Implementieren der Sortierung.

Gibt es in Golang klassenähnliche objektorientierte Funktionen? Gibt es in Golang klassenähnliche objektorientierte Funktionen? Mar 19, 2024 pm 02:51 PM

In Golang (Go-Sprache) gibt es kein Konzept einer Klasse im herkömmlichen Sinne, es stellt jedoch einen Datentyp namens Struktur bereit, durch den objektorientierte Funktionen ähnlich wie Klassen erreicht werden können. In diesem Artikel erklären wir, wie Strukturen zur Implementierung objektorientierter Funktionen verwendet werden, und stellen konkrete Codebeispiele bereit. Definition und Verwendung von Strukturen Werfen wir zunächst einen Blick auf die Definition und Verwendung von Strukturen. In Golang können Strukturen über das Schlüsselwort type definiert und dann bei Bedarf verwendet werden. Strukturen können Attribute enthalten

Vertieftes Verständnis der objektorientierten PHP-Programmierung: Debugging-Techniken für die objektorientierte Programmierung Vertieftes Verständnis der objektorientierten PHP-Programmierung: Debugging-Techniken für die objektorientierte Programmierung Jun 05, 2024 pm 08:50 PM

Indem Sie das Verfolgen des Objektstatus, das Setzen von Haltepunkten, das Verfolgen von Ausnahmen und die Verwendung der xdebug-Erweiterung beherrschen, können Sie objektorientierten PHP-Programmiercode effektiv debuggen. 1. Objektstatus verfolgen: Verwenden Sie var_dump() und print_r(), um Objektattribute und Methodenwerte anzuzeigen. 2. Legen Sie einen Haltepunkt fest: Legen Sie einen Haltepunkt in der Entwicklungsumgebung fest. Wenn die Ausführung den Haltepunkt erreicht, wird der Debugger angehalten, sodass der Objektstatus einfacher überprüft werden kann. 3. Ausnahmen verfolgen: Verwenden Sie Try-Catch-Blöcke und getTraceAsString(), um den Stack-Trace und die Meldung abzurufen, wenn die Ausnahme auftritt. 4. Verwenden Sie den Debugger: Die Funktion xdebug_var_dump() kann den Inhalt von Variablen während der Codeausführung überprüfen.

See all articles