2010-12-04 93 views
0

我有這個定義的TabListJavaScript的範圍混亂

MyApp.TabList = function (selector) { 

    var private = { 
     $list: $(selector), 
     tabs: [] 
    }; 

    this.add = function (tab) { 
     private.tabs.push(tab); 
    }; 
}; 

當我打電話這一點,但是,並在this.add人體分解,private不會出現在局部範圍內:

MyApp.tabs = new MyApp.TabList("#tabs"); 

$("#tab-add").click(function() { 
    MyApp.tabs.add(new MyApp.Tab("title")); 
}); 

private不保留在對象內部嗎?

如果此代碼獨立如上,我可能會錯過一些—我想簡單地把它盡我所能爲示範的目的。

+0

@Agile通常你想用`return this;`結束構造函數。我不認爲這有什麼不同,但這是一個很好的做法(從我聽到的)。 – 2010-12-04 01:16:44

+0

@敏感`private`變量不應該在`add`函數的局部範圍內 - 它在外部範圍內(TabList`構造函數的範圍)。 – 2010-12-04 01:18:39

回答

2

由於關閉屬性,該變量肯定應該在add()函數中可用。

這可能不是答案,但private是Javascript關鍵字。您應該嘗試避免將其用作變量的名稱。它可能會導致未知的錯誤出現,有時調試器也無濟於事。給它一個鏡頭,讓我們知道它是否有效!