2011-10-31 18 views
1

我是JavaScript新手,所以StackOverflow上的一些現有答案讓我困惑。超類的Javascript方法

如果我有一個動態類內的靜態類(如下圖)。我如何訪問動態類中的變量?

function ListItem() = { 
    var myItem = function() { return "something" }; 

    ... 
    ItemDropdown = function(){ 
    show : function(){ 
     //Want to access the ListItem's myItem here 
     alert(super.myItem() + "dropdown menu"); 
    } 
    } 
} 


var foo = new ListItem(); 
foo.ItemDropdown.show(); 
+2

您的格式有語法錯誤,像函數x()= { – Joe

+0

JavaScript doesn沒有課。至少,不像Java那樣。您可能想閱讀[MDN必須對此主題進行說明](https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Details_of_the_Object_Model#Class-Based_vs._Prototype-Based_Languages)。還要注意JavaScript中的'this'與Java或C#的工作方式非常不同。 – nnnnnn

回答

2

如果您想要ItemDropdown成爲ListItem的方法,則需要使用this來聲明它。

this.ItemDropdown = { 

與已myItem定義的方式,你可以自行調用它。

alert(myItem() + "dropdown menu"); 

也有幾個語法錯誤:

function ListItem() = { 
// Should be 
function ListItem() { 

ItemDropdown = function(){ 
// Should be 
this.ItemDropdown = { 

所以,你最終這樣的:

function ListItem() { 
    var myItem = function() { return "something" }; 

    this.ItemDropdown = { 
    show : function(){ 
     alert(myItem() + "dropdown menu"); 
    } 
    } 
} 
+0

+1,很好的原始答案 – Joe

0

使用this

​​

我已經固定到錯誤:

  1. )列表項()= {
  2. )this.ItemDropdown =函數(){//然後object literal mark up
1

首先,Javascript不是基於類的繼承,它是基於原型的繼承。你需要使用諸如「函數構造函數」之類的術語。如果您來自「傳統」基於類的繼承語言,那麼請檢查this

這是說,如果你想這樣的工作:

var foo = new ListItem(); 
foo.ItemDropdown.show(); 

然後ItemDropdown必須是ListItem定義(例如:函數的構造函數)屬性 - 這意味着你需要使用this