2016-06-29 1 views
1

Ich lerne und versuche JavaScript Objekte tief zu verstehen. Ich habe Object prototype über das Beispiel unten gelernt.Warum das Hinzufügen einer Methode zur Funktion direkt nicht wie function.prototype funktioniert?

var MyObj = function(){ 
    this.Name = "Stackoverflow"; 
} 

MyObj.prototype.prop = "OK"; 

var instance = new MyObj(); 
instance.prop = "OK"; 

console.log(instance.hasOwnProperty("Name")); //true 
console.log(Object.getOwnPropertyNames(instance)); //[ 'Name', 'prop' ] 

In dem obigen Beispiel kann instance Objekt zugreifen nicht getOwnPropertyNames von Object. Weil getOwnPropertyNames Funktion kein Mitglied des Prototyps Object ist. Wenn ich danach mein eigenes Objekt wie z. B. Object oben schreibe, z.

var MyDream = function(){} 
MyDream.prototype.canAccessThisMethod = function(x){}; 

var instanceSample = new MyDream(); 

instanceSample.canAccessThisMethod("blabla"); //because of prototype 
MyDream.method(blabla); // didn't work. 

Wie zu machen MyDream.method arbeiten in diesem Beispiel?

+1

Willkommen bei StackOverflow. Zuallererst ein paar Dinge, Sie wollen 'Prototypen' lernen, was gut ist, trotzdem hat es nichts damit zu tun, der' Funktion' hier eine Methode hinzuzufügen. Aber Sie werden diese Dinge auf dem Weg umgehen. – Rohit416

+0

Hier ist ein [nettes Tutorial über JavaScript-Prototypen.] (Https://www.pluralsight.com/blog/software-development/understanding-javascript-prototypes) – Rohit416

Antwort

1

aus Erläuterung des prototypes Apart hinzugefügt werden, lassen wir konzentrieren sich auf das, was Sie in folgendem Ausschnitt dh

var MyDream = function(){} 
MyDream.prototype.canAccessThisMethod = function(x){ }; 

var instanceSample = new MyDream(); 

instanceSample.canAccessThisMethod("blabla"); //because of prototype 
MyDream.method(blabla); //How can we write "MyDream.method" in this example 

Lassen Sie uns Schritt für Schritt gehen gefragt.

var MyDream = function(){} 

Sie erstellt eine anonyme Funktion und es MyDream Variablen zugewiesen. Functions are first class objects in JavaScript. Sie sind stark und flexibel. Wenn Sie also ein Objekt erster Klasse sind, können Sie sie Variablen wie Sie zuweisen. Sie können sie als Parameter übergeben. Obendrein können Sie auch dort Prototypkette als

MyDream.prototype.canAccessThisMethod = function(x){ }; 

Ich glaube, Sie haben erweitern den Rest der Sachen die Details so heraus Skipping und auf schnellen Vorlauf zu dieser Aussage zu bewegen.

MyDream.method(blabla); 

Leider wird dies nicht funktionieren. Der Grund dafür ist, dass Sie eine function as method als Funktionsliteral zuweisen müssen. Sie können Methoden hinzufügen wie Objects.

MyDream.method = function(x) { 
    console.log(x); 
} 

MyDream.method("bla bla"); 
+0

Hallo Rohit416. Danke für die Antwort. Du hast gesagt, dass "MyDream.method" nicht funktioniert. Es funktioniert nur als eine wörtliche Funktion. Ich verstehe hier kein Problem. Ich frage mich, wie Object.getOwnPropertyNames funktioniert? – mrkiyak

+0

Ist es möglich, eine Funktion mit unzugänglichen Methoden aus geerbten Objekten als Literalfunktion zu schreiben? – mrkiyak

+0

_ "Ich frage mich, wie Object.getOwnPropertyNames funktioniert" _ Es hat einen anderen Zweck, es gibt alle Eigenschaftsnamen und Methoden zurück, die in der Objekt. Außerdem werden alle integrierten Typen als Objektinstanzen behandelt. Ein "Funktions" -Prototyp ist eigentlich ein "Objekt", das letztendlich auf "function() {}" zeigt. – Rohit416

1

Sie können dies tun, zum Beispiel:

instanceSample.prototype.method = function(x){ 
... 
} 

Prototype bedeutet, dass die Methode „Methode“ wird auf alle Objekte der Klasse „MyDream“

Verwandte Themen