2016-08-12 1 views
0

ich ein Subobjekt hinzufügen bin versucht zu widersprechen wieHinzufügen Subobjekt zum Objekt

var myObj = myObj || {}; 
myObj.prototype.subObj = { 
    'funk': function() { 
    console.log('Funky success'); 
    } 
}; 

aber ich erhalte den Fehler

Uncaught TypeError: Cannot set property 'subObj' of undefined

+0

weil Prototyp nicht definiert ist – atul

+0

der * Prototyp * ist ein Attribut * Funktion * nicht * Objekt *. Sie können Ihr Unterobjekt einfach an * myObjObj * anhängen. –

+1

Instanz des Objekts hat keinen Prototyp. Der Typ (sein Konstruktor) hat es. –

Antwort

2

Wenn Sie Prototypen verwenden, müssen Sie erstellen Ihre Objekte mit Funktionen:

function myObj() { } 

myObj.prototype.subObj = { 
    'funk': function() { 
    console.log('Funky success'); 
    } 
}; 

var obj = new myObj(); 
obj.subObj.funk(); // => 'Funky success' 

Aber Sie können immer tun:

var myObj = {} 

myObj.subObj = { 
     'funk': function() { 
     console.log('Funky success'); 
     } 
    }; 

myObj.subObj.funk(); // => 'Funky success' 
0
let myObj = { 
    subObj: { 
     funk: function() { 
      // whatever 
     } 
    } 
} 
+0

Dies ist ein vereinfachtes Beispiel, in dem ich versuche, Namespacing einzurichten, das heißt, ich werde diese Unterobjekte in separaten Dateien deklarieren, um alles sauber zu halten. Was Sie hier getan haben, wird für mich nicht funktionieren. Aber die Jungs in den Kommentaren haben mich aus der Patsche gebracht. Danke trotzdem! – wogsland

0

Sie nicht zu myObj.prototype.subObj zuweisen können, es sei denn myObj.prototype bereits vorhanden und enthält ein Objekt. Javascript erstellt nicht automatisch Zwischenobjekte in der Hierarchie. So könnten Sie tun:

0

In einer sehr ähnlichen Weise zu Ihrem Ansatz in ES6 können Sie sicher so tun;

var myObj = myObj || {}; 
 
myObj.__proto__.subObj = { 
 
    'funk': function() { 
 
    console.log('Funky success'); 
 
    } 
 
}; 
 

 
myObj.subObj.funk();

Aber auch Object.create() Methode wie folgt verwenden können;

var prototype = { 
 
       subObj : { 
 
          funk: function() { 
 
            console.log('Funky success'); 
 
           } 
 
          } 
 
       }, 
 
     myObj = myObj || Object.create(prototype); 
 
myObj.subObj.funk();

Verwandte Themen