2010-01-20 72 views
3

内部对象(t1)是否有访问其容器对象的方法?内部对象访问容器

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

执行以下代码时我得到一个错误“this.fnc1不是一个函数”,因为这是指T1对象,而不是第t对象。

有什么办法可以访问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();