2015-04-14 4 views
0

Как бы вы определили объект в Javascript, чтобы его тело включало свойства, которые также являются объектом, который вы определяете? Например, если я определял класс под названием «Организм», и определение какого-либо организма включало еще два организма, называемых организмом А и организмом? Это так:Объект Javascript внутри объекта

Organism(){ 

value: value 
Organism organismA; //microbe for example 
Organism organismB; //bacteria for example 

}; 
+0

это может быть полезно http://stackoverflow.com/questions/502366/structs-in-javascript – emrahozkan

+1

JavaScript делает не делайте явного ввода текста, так что вам придется немного изменить этот пример. Короткий ответ: вы можете поместить столько объектов внутри объектов, сколько захотите, и вы можете связать столько свойств экземпляра, которые сами являются объектами в конструкторе объектов. –

+0

Просто присвойте правильные значения свойствам. –

ответ

1

Javascript не является типизированным языком.

Вы не можете применять типы свойств объекта. Если вы этого хотите, посмотрите на что-то вроде TypScript.

Вы можете сделать «вложенные объекты»

var microbe = getMicrobe(); 
var bacteria = getBacteria(); 
var organism = { organismA: microbe, organismB: bacteria }; 

, но вы не можете применять их типы:

// not an error (until you try to use the property as an Organism) 
organism.organismA = "Not an Organism"; 
organism.organismB = 123; 

organism.doesntEvenExist = microbe; 
1

Если вы пытаетесь создать конструктор, который будет определять свойства на экземпляре, которые также являются экземпляров объекта, это невозможно. Допустим, например, что это ваш конструктор:

function Organism() { this.organismA = new Organism(); }

Затем пытается создать новый экземпляр, который будет вызывать «RangeError: Максимальный размер стека вызова превышена» и по уважительной причине, потому что каждый раз, когда новый экземпляр он попытается создать новый экземпляр сам по себе и так далее, пока вы не превысите стек.

Однако вы можете сделать это в JavaScript:

function Organism() {} 
 

 
var organism = new Organism(); 
 

 
organism.organismA = new Organism(); 
 
organism.organismB = new Organism(); 
 

 
// And now the instance and its properties are all Organism 
 
console.log('organism is instance of Organism: ' + (organism instanceof Organism)); // true 
 
console.log('organism.organismA is instance of Organism: ' + (organism.organismA instanceof Organism)); //true 
 
console.log('organism.organismB is instance of Organism: ' + (organism.organismB instanceof Organism)); //true 
 

 
// If you want you can wrap this in a factory 
 

 
function createExtendedOrganism() { 
 
    var organism = new Organism(); 
 

 
    organism.organismA = new Organism(); 
 
    organism.organismB = new Organism(); 
 
    
 
    return organism; 
 

 
} 
 

 
var extendedOrganism = createExtendedOrganism(); 
 

 
// Again the instance and its properties are all Organism 
 
console.log('extendedOrganism is instance of Organism: ' + (extendedOrganism instanceof Organism)); //true 
 
console.log('extendedOrganism.organismA is instance of Organism: ' + (extendedOrganism.organismA instanceof Organism)); //true 
 
console.log('extendedOrganism.organismB is instance of Organism: ' + (extendedOrganism.organismB instanceof Organism)); //true

Смежные вопросы