Heim  >  Artikel  >  Web-Frontend  >  JS objektorientiert, Prototyp, call(), apply()

JS objektorientiert, Prototyp, call(), apply()

青灯夜游
青灯夜游nach vorne
2018-10-08 16:26:562456Durchsuche

Ich habe prototyp.js an diesem Tag verwendet, also habe ich es geöffnet und nach dem Lesen einiger Zeilen verwirrt. Der Grund dafür war, dass ich mit der objektorientierten Natur von js nicht sehr vertraut war, also habe ich gesucht Baidu und Google haben endlich Erfolg gehabt. Ich schreibe dies zum Gedenken^_^.

1. Ursache
Ich habe es an diesem Tag geöffnet und einen Blick darauf geworfen. Der Grund dafür war, dass ich damit nicht sehr vertraut war objektorientierte Natur von js, also habe ich auf Baidu + Google gesucht. Endlich habe ich ein wenig gewonnen, also schreibe ich dies zum Gedenken ^_^.

prototype.js-Codeausschnitt

var Class = { 
create: function() { 
return function() { 
this.initialize.apply(this , arguments); 
} 
} 
} 
// Class使用方法如下 
var A = Class.create(); 
A. prototype={ 
initialize:function(v){ 
this .value=v; 
} 
showValue:function(){ 
alert(this.value); 
} 
} 
var a = new A(‘helloWord!'); 
a. showValue();//弹出对话框helloWord!

l Was ist Initialisieren?
l Was macht die Apply-Methode?
Was ist mit der Variablen l arguments?
l Warum wird die Initialisierungsmethode nach dem neuen A ausgeführt?

Finden Sie die Antwort:

2. Objektorientierte Js
Was ist initialisieren?
Es ist nur eine Variable, die es darstellt Eine Methode, deren Zweck der Konstruktor der Klasse ist.
Seine spezifischen Funktionen werden durch die objektorientierte Natur von js unterstützt. Wie sieht also die objektorientierte Natur von js aus? Was sind die Gemeinsamkeiten und Unterschiede zu Java?
Sehen Sie sich den Code an:

var ClassName = function(v){ 
this.value=v; 
this.getValue=function(){ 
return this.value; 
} 
this.setValue=function(v){ 
this.value=v; 
} 
}

Was ist also der Unterschied zwischen Funktionen und Klassen in JS?

Tatsächlich ist ClassName eine Funktion, die nach dem Erscheinen als Konstruktor zum Erstellen des Objekts verwendet wird.
Zum Beispiel

var objectName1 = new ClassName(“a”);//得到一个对象

wobei objectName1 das Objekt ist, das nach der Ausführung des ClassName-Konstruktors erhalten wird, und sich dies in der ClassName-Funktion auf das nach new erstellte Objekt bezieht, sodass objectName1 ein Attribut und zwei Methoden hat. Sie können sie so nennen:

objectName1.setValue(''hello''); 
alert(objectName1.getValue());//对话框hello 
alert(objectName1.value) ;//对话框hello

Also

var objectName2 = ClassName(“b”);//得到一个对象

Was bekommt objectName2? Offensichtlich ist es der Rückgabewert der Methode. Hier wird ClassName nur als gewöhnliche Funktion verwendet (obwohl der erste Buchstabe groß geschrieben wird). Der zuvor geschriebene Klassenname enthält jedoch keinen Rückgabewert, sodass Objektname2 nicht gefunden wird. Wem wird also „b“ zugewiesen? Hier wird kein Objekt generiert, sondern diese Methode wird einfach ausgeführt, daher wird dieses „b“ dem Objektfenster zugewiesen, das diese Methode aufruft. Der Beweis ist wie folgt:

var objectName2 = ClassName(“b”);//得到一个对象 
alert(window.value);//对话框b

Also alle Funktionen in JS sind die gleich, aber der Zweck kann unterschiedlich sein (wird zum Erstellen eines Objekts oder zum Ausführen einer Prozedur verwendet).

Es ist Zeit, zum Thema zurückzukehren. Was macht Initialisierung?

var Class = { 
create: function() { 
return function() { 
this.initialize.apply(this , arguments); 
} 
} 
} 
var A = Class.create();

Dieser Code erstellt eine Funktion und kopiert sie nach A. Diese Funktion ist

function() { 
this.initialize.apply(this , arguments); 
}

und die letztere Methode wird als Konstruktor verwendet. Wenn Sie diesen Konstruktor zum Erstellen eines Objekts verwenden, führt die Initialisierungsvariable des erstellten Objekts die Methode apply () aus. Der Zweck von apply () wird später erläutert, und wir werden weiterhin über Initialisierung sprechen. Auf diese Weise wird initialize beim Initialisieren des Objekts kontaktiert (wie kontaktiert wird, hängt von der Anwendung ab).
Was bedeutet also

A.prototype={ 
initialize:function(v){ 
this .value=v; 
} 
showValue:function(){ 
alert(this.value); 
} 
}

?

Prototyp bedeutet „Prototyp“. A ist eine Funktion (), dann ist A. Prototyp eine Variable in der Funktion, die eigentlich ein Objekt ist. Welche Methoden dieses Objekt hat, welche Methoden hat dann das von der Funktion generierte Objekt, also

var a = new A(‘helloWord!'); 
a. showValue();//弹出对话框helloWord!

Das a-Objekt hat also auch eine Initialisierungsmethode. Darüber hinaus verfügt jedes mit A erstellte Objekt über eine initialize-Methode, und wie bereits erwähnt, wird der Konstruktor während der Konstruktion aufgerufen und der Konstruktor fordert initialize auf, die apply-Methode aufzurufen. Wenn also ein neues A („helloWord!“) vorliegt, geht initialize zurück, um die apply-Methode aufzurufen. Hiermit wird eine Initialisierungsmethode aufgerufen.

3. call() und apply()

Ich habe einige Informationen im Internet gefunden und sie mit meiner eigenen Recherche kombiniert Verstehen Sie die Funktionen call() und apply(). Die Funktionen sind grundsätzlich gleich. Die Funktion von function().call(object,{},{}...) oder function().apply (object,[...]) besteht darin, dass das Objekt die Funktion aufruft () Hier besteht der Unterschied darin, dass die Aufrufparameter ab der zweiten an die Funktion übergeben werden und in der Reihenfolge durch "," getrennt aufgelistet werden können. Apply hat nur zwei Parameter. Der zweite ist ein Array, das alle an die Funktion übergebenen Parameter speichert.

this.initialize.apply(this , arguments); Was bedeutet ?

Das erste this hier bezieht sich auf das Objekt, das nach dem Aufruf des Konstruktors mit new generiert wurde, also das vorherige a, daher sollte sich das zweite this natürlich auch auf dasselbe Objekt beziehen. Dann besagt dieser Satz, dass dies (d. h. a) die Initialisierungsmethode aufruft und der Parameter das Argumentobjekt (Array-Objekt der Parameter) ist. Wenn also der Konstruktor ausgeführt wird, führt das Objekt a die Initialisierungsmethode zur Initialisierung aus Dass es mit dem Wort „initialisieren“ übereinstimmt, bedeutet das Richtige.

Wie werden also die Parameter zum Ausführen der Initialisierungsmethode übergeben?

4. Argumente Objekt

Dieser Code kann alles erklären:

function test(){ 
alert(typeof arguments); 
for(var i=0; i<arguments.length; i++){ 
alert(arguments[i]); 
} 
} 
test("1","2","3"); 
test("a","b");

Nach der Ausführung zeigt Alert(typeof arguments) an sind Objekte. Dann werden 1, 2 und 3 nacheinander abgespielt. Beschreibungsargumente sind die eigentliche Parametergruppe der aufrufenden Funktion.

var Class = { 
create: function() { 
return function() { 
this.initialize.apply(this , arguments); 
} 
} 
}

arguments 就是create返回的构造函数的实参数组,那么在 var a = new A(‘helloWord!'); 的时候‘helloWord!'就是实参数组(虽然只有一个字符串),传递给方法apply,然后在调用initialize 的时候作为参数传递给初始化函数initialize。 

以上就是本章的全部内容,更多相关教程请访问JavaScript视频教程

Das obige ist der detaillierte Inhalt vonJS objektorientiert, Prototyp, call(), apply(). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen