好吧,我试图弄清楚这是否有可能。这是代码:
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 函数。我想在内存中有一个原型函数,它会做同样的事情......有什么想法吗?
编辑:
我尝试了 Christoph 给出的解决方案,它似乎是目前唯一已知的解决方案。它需要记住 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());