こんにちは、スタッカー。インスタンス上の静的メンバーにアクセスする方法は?
ここではコードを使用していますが、何時間も苦労しています。アイデアは何個のインスタンスが作成されたかを追跡することですが、静的メソッドを呼び出して静的メンバーを変更/更新することもできます。同様の質問がありますが、私は自分の問題に対する解決策を実装できません。
// object constructor
function Foo() {
this.publicProperty = "This is public property";
}
// static property
Foo.staticProperty = "This is static property";
// static method
Foo.returnFooStaticProperty = function() {
return Foo.staticProperty;
};
console.log("Static member on class: " + Foo.staticProperty); // This is static property
console.log("Result of static method: " + Foo.returnFooStaticProperty()); //This is static property
var myFoo = new Foo();
console.log("myFoo static property is: " + myFoo.staticProperty); // undefined
わかりやすくするために、ここではコンストラクタとメンバ名を変更しました。私は何が起こっているのは明らかだと思います。私は両方のコンストラクタのオブジェクトとインスタンスの共有静的なプロパティをしたい。
私はコンストラクタオブジェクトの静的メンバーにアクセスできますが、インスタンスでは定義されていません。
ご協力いただければ幸いです。
morとaeorilの両方に感謝します。この質問がローカライズされたことで、皆さんからのお返事は、プロトタイプの継承をより良く理解するのに役立ちます。 P.P. Javascriptに静的メンバーがないので、オブジェクトインスタンスは私が期待したとおりに直接インスタンスを継承しません。これがプロトタイプの魔法です。 おかげ
はい、私は今それを見ました。ポイントは、オブジェクトのコンストラクタとそのインスタンス間で同じ変数を共有していることですが、静的メソッドまたはオブジェクトコンストラクタでメソッドを実行できることもあります。また、最後のログ呼び出しで、instanceのstaticPropertyは未定義です。 –
myFoo.staticFontStaticPropertyは、myFoo.returnFooStaticProperty()のような "kludge"関数がなければ、インスタンスオブジェクトから静的メンバーにアクセスすることはできないと説明するために、ログにmyFoo.staticPropertyが定義されていないことを示しました。 "kludge"関数は機能しますが、クラスとそのインスタンスの間で静的変数を共有する理由を説明できますか?プロトタイプ(および継承)を使って動作する方法を念頭に置いて考えることは有益でしょうか? – Aeoril
はい、私はプロトタイプのアプローチが時々私を混乱させると述べた。ポイントは、静的メンバーはすべてのインスタンスとクラス/コンストラクタ関数自体の間で共有されますが、値は1か所に格納されます。つまり、オブジェクトインスタンスはその値を継承しません。それがプロトタイプが現れる場所です。私とあなたの違いは、コンストラクタ関数のメソッドを呼び出す必要があるということだけです。 –