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();