2011-10-31 11 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

、:だから

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

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

を、あなたはこれで終わりますのような関数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

ItemDropdownListItemの方法にしたい場合は、thisを使用して宣言する必要があります。あなたがmyItemを定義した方法で

this.ItemDropdown = { 

、あなただけの自分自身でそれを呼び出すことができます。

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

また、カップルの構文エラーがあります:あなたのフォーマットに構文エラーがあり

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

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

+1、素敵な元の回答 – Joe

0

Iエラーに固定されてきた使用this

​​

  1. )リストアイテム()= {
  2. )this.ItemDropdown =関数(){//次いでオブジェクトリテラルマークアップ
1

まず、Javascriptはクラスベースの継承ではなく、プロトタイプベースの継承です。 「関数コンストラクター」などの用語を使用する必要があります。 "伝統的"クラスの継承言語を使用している場合は、thisをチェックしてください。

これは、あなたが仕事にこれをしたい場合は、言われている: - あなたがthisを使用する必要があることを意味:

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

その後ItemDropdownListItem定義(関数コンストラクタなど)のプロパティでなければなりません。

関連する問題