2011-12-24 10 views
0

javascriptでメソッド内にプロパティを設定することは可能ですか?メソッドのjavascriptプロパティ

function Main() { 

    this.method = function() { 
     this.parameter = 'something_relevant' 
    } 
} 

var p = new Main() 
p.method() 
console.log(p.method.parameter) 

例えば

私はこれを試してみましたが、それは未定義の "ログに記録します。それは範囲についてですか?

+0

'this.method'を割り当てた後、それが動作します。 – Cyclonecode

+0

@Krister Andersson:ここでは、非同期のものはありません。 – pimvdb

答えて

3

内部method()メソッドを表す関数オブジェクトではなく、メソッドが呼び出されるオブジェクトのプロパティを設定しています。

これは、メソッドの内部の違いを示しています

this.method = function() { 
    this.parameter = 'abc'; // Set parameter on the object on which method() is called 
    this.method.parameter = 'xyz'; // Set parameter on the object representing the method itself 
}; 

これは、あなたが機能上の特性を必要とするかどうかを決める必要があるメソッドの後にプロパティにアクセスするに差が

p.method(); 
console.log(p.parameter); // Display property of the object p, equals 'abc' 
console.log(p.method.parameter); // Display property of the function object representing method(), equals 'xyz' 

と呼ばれる示しオブジェクトまたはpオブジェクトにあります。ファンクションオブジェクトは、Main()コンストラクタによって作成されたいくつかのオブジェクトによって共有されることがあります。したがって、C++やJavaのような言語の静的メンバーにいくらか類似した振る舞いをします。

あなたがオブジェクトに定義されたプロパティを使用する場合は、あなたのコードは次のようになります。

function Main() { 

    this.method = function() { 
     this.parameter = 'something_relevant'; // Set property on object on which method() is called. 
    }; 
} 

var p = new Main(); 
p.method(); 
console.log(p.parameter); // Read property from object p. 

あなたがmethod()を表す関数オブジェクトで定義されたプロパティを使用する場合は、あなたのコードは似たものになりますこれに:

あなたが内部 `console.log`を配置する場合、` method`呼び出しは、非同期であるためである
function Main() { 

    this.method = function() { 
     this.method.parameter = 'something_relevant'; // Set property on function object representing method(). 
    }; 
} 

var p = new Main(); 
p.method(); 
console.log(p.method.parameter); // Read property from the function object. 
+0

あなたの答えを拡張していただきありがとう、基本的に私はそれが 'クラス'に関連していると言うことができるので、メソッドを説明するプロパティが必要です( JavaScriptのコンテキスト) – fatmatto

2

機能は、あなたがそれを得るようなので、それを設定し、基本的にオブジェクトです:

this.method = function() { 

}; 

this.method.parameter = 'something_relevant'; 

をまた、式の後にセミコロンがなくなるわけではありません。

+0

ありがとう、セミコロンに申し訳ありません、私は投稿中にそれらを忘れました – fatmatto

関連する問題