2012-06-08 2 views
0

У меня есть объект, который выглядит следующим образом:Javascript назначение нового объекта в качестве объекта собственности

var BigObject = { 
    'CurrentInt': 0, 
    'CurrentBool': false, 
    'CurrentObject': {} 
} 

И тогда, я объявляю SomeObject как это:

var SomeObject = { 
     'SomeString': "", 
     'SomeInt': 0 
} 

Эти два определения для объектов, когда они находятся в их исходном состоянии, вроде как определение типа, я думаю. Теперь я хочу присвоить new SomeObject BigObject['CurrentObject']. Я пробовал:

BigObject['CurrentObject'] = new SomeObject(); 

Но это не работает. На данный момент я просто выполняю прямое задание по ссылке BigObject['CurrentObject'] = SomeObject;, а затем, когда мне нужно сбросить значения SomeObject, я просто запускаю функцию, которая переопределяет каждое свойство SomeObject на начальной стадии.

Но как я могу использовать ключевое слово new, чтобы создать тип многоразового объекта, который является свойством BigObject.

Спасибо.

+0

Заметим, что 'BigObject [«CurrentObject»] 'может быть упрощено до' BigObject.CurrentObject' – Eric

+0

@Eric: да, я знаю, но я компиляции мой JavaScript с закрывающей компилятором, и мне нужно, чтобы сохранить его как , – frenchie

+0

Почему не удается закрыть компилятор? – Eric

ответ

2

Если вы определяете тип, вы должны использовать функцию-конструктор:

var SomeObject = function() { 
    this.someString = ""; 
    this.someInt = 0; 
} 

var BigObject = function() { 
    this.currentInt = 0; 
    this.currentBool = false; 
    this.currentObject = new SomeObject(); 
} 

После того, как вы определили эти конструкторы, вы можете new их (создавать экземпляры):

var myBigObject = new BigObject(); 
console.log(myBigObject.currentObject); 
+0

И затем, могу ли я получить доступ к свойствам, подобным объектам? – frenchie

+0

@frenchie: На примере, да. И вы можете изменить их, не затрагивая все экземпляры. – Eric

3

new может использоваться только с функцией, для запуска его в качестве конструктора:

function SomeObject() { 
    this.SomeString = ""; 
    this.SomeInt = 0; 
} 

Что вы сделали, это эквивалентно:

var SomeObject = new Object(); 
SomeObject.SomeString = ""; 
SomeObject.SomeInt = 0; 
1

Используйте классы JavaScript.

function SomeObject() { } 
SomeObject.prototype.someString = ""; 
SomeObject.prototype.someInt = 0; 

function BigObject(){ this.currentObj = new SomeObject; } 
BigObject.prototype.currentInt = 0; 
BigObject.prototype.currentBool = false; 
BigObject.prototype.currentObj = null; 

var a = new BigObject; 

a.currentObj instanceof SomeObject; // true 
+0

Не помещайте данные в прототип – Esailija

+0

@Esailija: Почему бы и нет? Это разумное место для значений по умолчанию, не так ли? – Eric

+1

, если вы поместите не примитивные данные в прототип, произойдут ошибки. Вы этого не делаете, и это круто, но кто-то другой может это сделать. – Esailija

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