Хорошо, я попытался выяснить, возможно ли это в любом случае. Вот код:
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, которая использует память. Я хотел бы иметь одну прототипную функцию, лежащую в памяти, которая будет делать то же самое... Любые идеи?
EDIT:
Я пробовал решение, данное Кристофом, и кажется, что это единственное известное решение на данный момент. Ему нужно запомнить информацию об идентификаторе, чтобы получить значение из контекста, но целая идея мне приятна:) 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());