2015-05-02 2 views
0

Итак, я пишу веб-страницу, содержащую несколько вложенных объектов.Javascript - «Это» ключевое слово в вложенных функциях

var Object = { 
    //first nested object 
    nested1:{ 
     //nested object within nested1 
     moreNested1:{ 
      //some values 
      a:1, 
      b:2 
     } 

    }, 

    //second nested object 
    nested2:{ 
     //nested object within nested2 
     moreNested2:{ 
      //some values 
      x:1, 
      y:2 
     } 

    } 

}; 

Как вы можете видеть, есть вложенные объекты внутри вложенных объектов, и есть ценности, хранящиеся в moreNested1 и moreNested2.

Моя проблема пытается получить доступ к a и b, используя функцию, которая находится в moreNested2. Используя ключевое слово «this», я написал функцию, которая пытается получить доступ и проанализировать a и b.

var Object = { 
//first nested object 
nested1:{ 
    //nested object within nested1 
    moreNested1:{ 
     //some values 
     a:1, 
     b:2 
    } 

}, 

//second nested object 
nested2:{ 
    //nested object within nested2 
    moreNested2:{ 
     //some values 
     x:1, 
     y:2, 

     //the function that accesses a and b from moreNested1 
     foo:function() { 
      //code that does not work 
      var a = self.this.this.a; 
      var b = self.this.this.b; 

      //logs a and b 
      console.log("a is " + a + " and b is " + b) 

     } 
    } 

} 

};

То, что я пытаюсь сделать, это доступ a и b, два значения хранятся в moreNested1, из функции в moreNested2. Мне просто нужен указатель на то, как получить доступ к некоторым значениям в такой ситуации.

спасибо. Если бы вы могли переписать код и объяснить, как и почему он работает, это было бы замечательно.

+0

возможно дубликат [? Как "это" ключевое слово работа] (http://stackoverflow.com/questions/3127429/how-does- the-this-keyword-work) –

+0

Где определяется 'self'? –

+0

Просьба предоставить меньше абстракции от вашего фактического прецедента. Что вы пытаетесь выполнить с помощью этого объекта? Объекту не требуется ничего особенного для ссылки на себя. Если вы пытаетесь добавить вычисленное свойство на основе других свойств, вы можете использовать 'Object.prototype.defineProperty()' с обработчиком для вашего вычисления или 'foo()' в вашем примере. – Josh

ответ

2

Использование «этого» не поможет - я думаю, вам нужно получить доступ к свойствам с верхнего уровня.

var thing = { 
//first nested object 
nested1:{ 
    //nested object within nested1 
    moreNested1:{ 
     //some values 
     a:1, 
     b:2 
    } 

}, 

//second nested object 
nested2:{ 
    //nested object within nested2 
    moreNested2:{ 
     //some values 
     x:1, 
     y:2, 

     //the function that accesses a and b from moreNested1 
     foo:function() { 
      var a = thing.nested1.moreNested1.a; 
      var b = thing.nested1.moreNested1.b; 

      //logs a and b 
      console.log("a is " + a + " and b is " + b); 

     } 
    } 

} 
}; 

thing.nested2.moreNested2.foo(); 

Вы можете запустить код на JSFiddle: https://jsfiddle.net/a6ehfbe5/

+0

Я не знал, что вы можете использовать имя объекта до его объявления. – jonathanhuo11

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