さて、私はこれが何らかの方法で可能であるかを理解しようとしました。コードは次のとおりです。
a=function(text)
{
var b=text;
if (!arguments.callee.prototype.get)
arguments.callee.prototype.get=function()
{
return b;
}
else
alert('already created!');
}
var c=new a("test"); // creates prototype instance of getter
var d=new a("ojoj"); // alerts already created
alert(c.get()) // alerts test
alert(d.get()) // alerts test from context of creating prototype function :(
ご覧のとおり、プロトタイプのゲッターを作成しようとしました。何のために?さて、あなたがこのようなものを書くなら:
a=function(text)
{
var b=text;
this.getText=function(){ return b}
}
...すべてがうまくいくはずですが、実際にはオブジェクトを作成するたびに、メモリを使用するgetText関数を作成します。同じことを行うプロトタイプ関数をメモリに配置したいと思います...何かアイデアはありますか?
編集:
クリストフから提供された解決策を試しましたが、今のところ唯一の既知の解決策のようです。コンテキストから値を取得するには ID 情報を記憶する必要がありますが、全体のアイデアは私にとっては素晴らしいものです :) ID は覚えておくべき唯一のものであり、他のすべては一度メモリに格納できます。実際、この方法で多くのプライベート メンバーを保存し、いつでも 1 つの ID だけを使用できます。実際、これは私を満足させます:)(誰かがより良い考えを持っていない限り)。
someFunc = function()
{
var store = new Array();
var guid=0;
var someFunc = function(text)
{
this.__guid=guid;
store[guid++]=text;
}
someFunc.prototype.getValue=function()
{
return store[this.__guid];
}
return someFunc;
}()
a=new someFunc("test");
b=new someFunc("test2");
alert(a.getValue());
alert(b.getValue());