2010-12-17 15 views
0

Hallo Ich versuche, meinen Kopf um einige grundlegende Dinge in Javascript zu bekommen, ich will das Äquivalent zu einer Klasse erstellen siehe unten:Objekt zurückgibt definiert nicht in Javascript

var myTest = { 
    myTester:"testing", 
    testCode:function(){ 
    return myTester; 
} 
}; 

wenn ich alert(myTest.testCode()); nenne ich bekommen Fehler myTester ist nicht definiert;

ich habe auch ähnliche Probleme, wenn der Wert von myTester zu setzen versuchen, was ich versuche, hier zu erreichen, etwas entlang der Linien dieser ist:

var myObj = myTest.testCode(); 
var tester = myObj.myTester; 

als myObj ist ein Objekt i einmal erstellt sollte in der Lage sein, auf seine Werte zugreifen, aber ich nicht in der Regel tun javascript nur jQuery und ich bin versuchen, eine Anwendung in reinem Javascript nur für Gehirn-Feed zu erstellen und würde eine kleine Anleitung zu schätzen, vor allem auf was nennen Sie das eigentlich, ist es eine Klasse ????

dank

Antwort

5

Sie haben this zuzugreifen:

var myTest = { 
    myTester:"testing", 
    testCode:function(){ 
    return this.myTester; 
} 
}; 

. Erläuterung: In jeder Funktion this auf den Kontext bezieht sich die Funktion in aufgerufen wird Wenn Sie eine Funktion mit func() rufen dann this verweisen an das globale Objekt (window im Browser).
Wenn Sie obj.func() anrufen, dann wird sich this auf obj beziehen.

Dies ist die einzige Verbindung zwischen einer Funktion und einem Objekt. Die bloße Tatsache, dass Sie eine Funktion als Eigenschaft eines Objekts definieren, macht nicht die Funktion dieses Objekts bewusst.

Funktionen sind erstklassige Objekte in JavaScript und daher nicht an ein Objekt (oder eine Klasse) gebunden (wie in anderen Sprachen, z. B. Java).


Aber

var myObj = myTest.testCode(); 
var tester = myObj.myTester; 

würde nicht funktionieren, da myTest.testCode() kehrt der String "testing" (und Strings haben keine myTester Eigenschaft).

var myTest = { 
    myTester:"testing", 
    testCode:function(){ 
    return this; 
} 
}; 

aber dann, die beiden Linien sind identisch mit

var tester = myTest.myTester; 

Ich schlage vor, eine Einführung zu lesen: Wenn Sie diesen Code Arbeit machen wollen, würden Sie this in testCode zurückkehren zu JavaScript, z MDC - JavaScript Guide und lesen Sie besonders über Objekte.

S.S .: Um sehr korrekt zu sein, gibt es keine Klassen in JavaScript. Nur Objekte und Konstruktorfunktionen.

+0

wie kann ich mehrere Werte wie oben kann ein Penner bekommen Beispiel: myTester: null, myTester2: null, testCode() function() {this.myTester = "123"; this.myTester2 = "456"; } Wie würde ich den Wert von myTester und myTester2 bekommen, was davon abhängen würde, was im Testcode passiert ist, wenn Sie meine Bedeutung bekommen – davethecoder

+0

@ minus4: Nun, wenn Ihr Objekt in 'var myTest = {}' gespeichert ist. Dann würden Sie tun: 'myTest.testCode();' und danach können Sie auf die Werte über 'myTest.myTester' oder' myTest.myTester2' zugreifen. Aber Sie müssen den Rückgabewert von 'testCode()' nicht speichern, da Sie sowieso nichts zurückgeben. –

+0

böse yep versucht, dass alles zusammen kommt :-) danke Kumpel – davethecoder

0

Was Sie in Ihrem Beispiel haben, würde meiner Meinung nach keine Klasse genannt werden, da es keine Konstruktorfunktion hat. An diesem Punkt ist es nur ein Objekt.

Wie von Felix Kling erwähnt, müssen Sie explizit this verwenden, um auf Eigenschaften Ihres Objekts innerhalb seiner Methoden zu verweisen.

Dieses Beispiel funktioniert nicht zu tun, was Sie wollen:

var myObj = myTest.testCode(); 
var tester = myObj.myTester; 

Die testCode Methode (einmal feste this zu verwenden), gibt die myTester Eigenschaft (String). Diese Zeichenfolge hat selbst keine myTester-Eigenschaft, daher enthält die tester-Variable undefined.

könnten Sie stattdessen nur tun

var tester = myTest.myTester; 

zurück zu Schritt könnte das allgemeine Muster für eine Klasse so etwas wie dieses:

MyClass = function(initialValue) { 
    this._myProperty = initialValue; 
} 

MyClass.prototype = { 
    getMyProperty: function() { 
    return this._myProperty; 
    }, 

    setMyProperty: function(value) { 
    this._myProperty = value; 
    } 
}; 

var myObj = new MyClass("test"); 
alert(myObj.getMyProperty()); 
myObj.setMyProperty("something"); 
Verwandte Themen