aufrufen Sagen wir haben eine Konstruktorfunktion in JavaScript
, die ich verwenden, um meine Objekte zu erstellen. Wie würde ich den "Inhalt" aller Objekte ändern, die von dieser Funktion durch einen Methodenaufruf von dieser Funktion erstellt werden. Ich frage mich, ob es möglich ist, einen Methodenaufruf auf den Prototyp aufzurufen, so wie wir den Prototyp modifizieren und unsere eigenen Methoden/Eigenschaften hinzufügen würden.Ist es möglich, eine Methode aus einer Objektdefinition Konstruktor Funktion
Zum Beispiel:
function MyConstructor()
{
var privateVariable = "This is an ORIGINAL private variable";
this.publicVariable = "This is public";
this.modificationMethod = function(){
// I want to call this methode on the prototype
privateVariable = "I am now changed";
};
this.alertMe = function(){
alert(privateVariable);
};
}
var a = new MyConstructor();
a.alertMe(); // alerts This is an ORIGINAL private variable
a.modificationMethod();
a.alertMe(); // alerts I am now changed
Dies funktioniert, wenn ich ein einzelnes Objekt zu ändern, ich die Methode aufrufen, ändert es das einzelne Objekt. Ich möchte jedoch alle Objekte ändern, die vom Konstruktor erstellt werden.
Ich weiß, dass ich neue Methoden, um es wie folgt hinzufügen:
MyConstructor.prototype.foo = function(){
alert("foo");
}
a = new MyConstructor();
a.foo();
Aber es lässt mich nicht die bestehenden Methoden ausführen, um die Eigenschaften zu ändern, und wirft einen Fehler:
MyConstructor.prototype.modificationMethod();
"modificationMethod ist keine Funktion"
'MyConstructor.prototype.foo = function() {this.modificationMethod()}; a = neu MyConstructor(); ein.foo() ' –
Dies löst das Problem nicht wirklich, es macht eine andere Methode, die die erste Methode aufrufen wird, aber sie ruft sie nie auf. Es erstellt nur eine Methode, um eine Methode aufzurufen, während ich die Methode ausführen muss, um eine private Eigenschaft für alle Objekte zu ändern, muss die Methode auf dem Prototyp aufgerufen werden, nicht eine Instanz von eins ('a'). – Dellirium
Sie können keine privaten Eigenschaften von 'prototype' abrufen, da private Eigenschaften nur innerhalb von 'function constructor scope' existieren. –