2010-01-20 4 views
3

Есть ли способ для внутреннего объекта (t1) получить доступ к его контейнерному объекту.внутренний контейнер доступа к объекту

var t = { 
       fnc1: function(){ 
        alert("fnc1"); 
       }, 
       t1: { 
        fnc2: function(){ 
         alert("fnc2"); 
        }, 
        fnc3: function(){ 
         this.fnc1(); 
        } 
       } 
      }; 
t.t1.fnc3(); 

при выполнении следующего кода я получаю сообщение об ошибке «this.fnc1 не является функцией», так как это имеет в виду объект t1 и не т объекта.

Есть ли способ получить доступ к fnc1?

ответ

2

Конечно, до тех пор, пока вы не перезаписывает переменную:

t.fnc1() 

Если вы хотите вызвать fnc1() как метод t.t1, используйте call() или apply().

0

Пытается использовать Javascript как чистый язык OO, часто приводит к большим разочарованиям.

Вы можете использовать вместо Javascript определенные функции, в основном функции и блокировки.
Я привел вас пример и сделал его вариант:

var t = function(){ 
    var str = "fnc", 
     fnc1 = function(){ 
      alert(str + "1"); 
     }; 
    return { 
     fnc1:fnc1, 
     t1:{ 
      fnc2:function(){ 
       alert(str + "2"); 
      }, 
      fnc3:fnc1 
     } 
    }; 
}; 
t().t1.fnc3();