tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
337
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    rambo rambo ist offline Mitglied Silber
    Registriert seit
    Sep 2009
    Beiträge
    64
    Hi,

    ich habe folgende Klasse in JavaScript:

    Code javascript:
    1
    2
    3
    4
    5
    6
    
    var test = function() {
        this.testObjInner = new Array();
        this.testStrInner = '';
    };
    test.prototype.testObj = new Array();
    test.prototype.testStr = '';

    Diese Klasse rufe ich zwei mal auf und fülle das erste Objekt mit Inhalt:
    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    var test1 = new test;
     
    test1.testObjInner.push('foo');
    test1.testObj.push('foo');
     
    test1.testStrInner = 'foo';
    test1.testStr = 'foo';
     
    console.log(test1.testObjInner, test1.testObj, test1.testStrInner, test1.testStr);
     
    var test2 = new test;
    console.log(test2.testObjInner, test2.testObj, test2.testStrInner, test2.testStr);

    Die Ausgabe von test1 ist wie erwartet:
    Code :
    1
    
    [ 'foo' ] [ 'foo' ] 'foo' 'foo'

    Jedoch ändert sich bei test2 testObj nicht, wobei es mit testStr oder testObjInner funktioniert:
    Code :
    1
    
    [] [ 'foo' ] '' ''

    Wieso verhält sich testObj anders als testStr und testObjInner?

    Vielen Dank im Voraus!

    Grüße
    Max
    Geändert von rambo (06.01.12 um 19:43 Uhr)
     

  2. #2
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Was hat das mit Node.js zu tun?

    Ich habe dazu mal ein vereinfachtes Beispiel erstellt: http://jsfiddle.net/H8TWW/


    Das liegt an folgendem:
    Wenn du testObj.push aufrufst, fügst du ein Element zu dem Array hinzu, welches sich alle Instanzen teilen.
    Wenn du allerdings testStr einen Wert zuweist, dann lässt das die Eigenschaft von dem Prototyp unverändert und du hast stattdessen eine eigene Eigenschaft für genau dieses eine Objekt, die die Eigenschaft vom Prototyp überdeckt/verschwinden lässt. Guck dir die Ausgabe von dem Fiddle an, dann sollte bei der Ausgabe von hasOwnProperty alles klar werden.
     

  3. #3
    rambo rambo ist offline Mitglied Silber
    Registriert seit
    Sep 2009
    Beiträge
    64
    Danke für die Antwort.

    Gibt es eine Lösung für dieses Problem, außer das Array (wie oben, testObjInner) im Constructor zu deklarieren?
     

  4. #4
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Das Array im Konstruktor zu deklarieren ist der übliche Weg. Wenn dir das nicht gefällt, musst du dir eventuell eines der vielen Frameworks zum "Verschönern" von Klassen in JavaScript angucken.

    Beispiel: https://github.com/ded/klass
     

  5. #5
    rambo rambo ist offline Mitglied Silber
    Registriert seit
    Sep 2009
    Beiträge
    64
    Okay, vielen Dank.
     

Ähnliche Themen

  1. Benutzerdaten an einem XPresso-Node
    Von nux95 im Forum Cinema 4D
    Antworten: 25
    Letzter Beitrag: 03.08.10, 12:26
  2. Von einem String zu einem Objekt konvertieren
    Von Jens K im Forum Java Grundlagen
    Antworten: 4
    Letzter Beitrag: 30.06.08, 12:18
  3. Problem mit Fade von einem Objekt
    Von NoGFX im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 17.03.05, 19:55
  4. Antworten: 2
    Letzter Beitrag: 09.09.03, 10:41
  5. Antworten: 1
    Letzter Beitrag: 02.11.01, 19:02

Stichworte