Javascript Objekt-Methode zurück, wie Sie undefiniert
Ich habe gekämpft, mit diesem Stück code, der für durchaus ein paar Tage. Im wesentlichen ist es ein Objekt, das die Eingabe von 3 Textfelder und verkettet Sie in einer Zeichenfolge.. oder das ist, was es tun sollte.
Student.toString gibt den Wert undefiniert oder "Uncaught TypeError: die Eigenschaft 'Student' of object [object object] ist nicht eine Funktion", wenn es sein sollte name, Vorname und anschließend die id-Nummer. Kann jemand erklären, was ich falsch gemacht habe auf dieser?
<div id='textInside'>
First Name:<input type='text' id='fName'><br>
Last Name:<input type='text' id='lName'><br>
Student Id: <input type='text' id='stuId'><br>
<button onclick='readInputs()'>Update</button>
<p id='stuInfo'></p>
</div>
<script type='text/javascript'>
var fiName = document.getElementById('fName');
var laName = document.getElementById('lName');
var studeId = document.getElementById('stuId');
var toP = document.getElementById('stuInfo');
var Student = new Object;
function Student() {
this.firstName = fiName;
this.lastName = laName;
this.studentId = studeId;
this.toString = function() {var result = toP.innerHTML = this.lastName + this.firstName + this.studentId};
return result;
this.readInputs = function() { };
}
function readInputs() {
Student();
Student.toString();
}
</script>
- das nächste mal, legte Ihr Beispiel in JSfiddle und Sie machen uns alle viel glücklicher. jsfiddle.net/YnqxC
- Sie haben zwei
Student
. Und Sie war nichtnew
ärger. Und IhretoString
erfordert eine Instanz. - Es gibt mehrere Probleme mit dem code, den du gepostet hast. Es könnte sein am besten klären, was Sie tun möchten.
- es nicht. Posting precise code ist hier vorzuziehen, da es bequemer ist und hält den code im Zusammenhang mit der Frage eher als abstrahiert zu einem anderen Ort.
- Die zwei sind nicht gegenseitig exklusives.
- Vielleicht sind die folgenden Antworten können Ihnen helfen, Verständnis für Prototypen und Konstruktor-Funktionen: stackoverflow.com/a/16063711/1641941 Es kann eine ganze Menge Holz aber es lohnt sich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es... eine Menge falsch hier.
First off, verwenden Sie
{}
, nichtnew Object
. Neben, dieser wird nur gesetztStudent
zu einemnew Object
und überschreiben Ihre Funktion, da die Funktion gehievt wird. Ich bin mir ziemlich sicher, dass du nur gedacht zu haben, das eine Funktion gibt.Weiter
return result;
ist nicht in IhremtoString
Funktion, das ist ein Fehler, und wieder nicht, die du meldest. Ist das eigentlich dein code? Verwenden Sie den Prototyp auch. UndtoString
sollte keine Nebenwirkungen haben und Konstruktoren sollte nicht Lesen globals.Nun
readInputs
kann wie folgt Aussehen (hat es etwas zu tun mit der leeren Funktion aufStudent
s, by the way?):Beachten Sie, dass der Einsatz
new
mit Konstruktoren zum erstellenthis
richtig, und ergreifen Sie dievalue
Eigenschaft der input-Elemente, und tatsächlich etwas zu tun mit der return-Wert der Funktion.Dieser Fehler:
scheint unmöglich zu mir, aber ich konnte einfach sein, etwas zu verpassen. (Sind Sie auf IE8?)
new Object
ist nicht eine Funktion, inStudent()
.[[Class]]
des Objekts in der gleichen Weise wie typeof macht und sagt: "dieses Objekt ist die Klasse Objekt und nicht implementieren nennen, daher ist es nicht eine Funktion". Ich bin kein fanboi für IE, aber es gibt keinen Grund, die bash es hier.window
(das hab ich vorausgesetzt wird, wie diese Fehler behandelt). Plus[object Window]
wäre nützlich, da.<p id='stuInfo'></p>
Versuchen Sie, diese
Oben ist ein Beispiel für Objekt-orientierte java-Skript-code. Ich habe ein Student-Konstruktor-Funktion definiert und eine toString-Methode auf die neuen Schüler geben.
Es wird empfohlen, fügen Sie Ihre Methoden, um die Prototyp-Kette um, um Sie zu binden, um den Typ und nicht nur eine bestimmte Instanz.
Sollten Sie setzen .Wert nachdem Sie die Elemente id. Da können Sie die id eines Elements, nicht aber dessen Wert.
also macht Ihren Variablen einen Wert haben.
Instantiieren auf das Objekt, verwenden Sie den word-neue
Da erzeugen Sie student, Sie haben zu geben, als argument an den Konstruktor
Sollte der code looke wie diese
var fiName = ;
s.