嗯,我試圖找出這是可能的任何方式。這裏是代碼:原型上的私人成員
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 :(
正如你看到我試圖創建原型getter。爲了什麼?那麼,如果你寫的是這樣的:
a=function(text)
{
var b=text;
this.getText=function(){ return b}
}
...一切都應該罰款..但其實我每次創建對象 - 我創建一個使用內存的getText功能。我想有一個原型功能躺在記憶裏,會做同樣的...任何想法?
編輯:
我試圖通過克里斯托夫給出的解決方案,它似乎是其唯一已知的,現在的解決方案。它需要記住ID信息以從上下文中檢索值,但是對我來說整個想法都很好:) ID只是需要記住的一件事,其他所有內容都可以在內存中存儲一次。事實上,您可以通過這種方式存儲大量私人成員,並隨時使用唯一的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());
這似乎是[另一個問題]的副本(http://stackoverflow.com/questions/436120) – 2009-01-27 13:07:49