Javascript private member on prototype...

Posted by Wilq32 on Stack Overflow See other posts from Stack Overflow or by Wilq32
Published on 2009-01-27T12:26:17Z Indexed on 2010/12/21 16:54 UTC
Read the original article Hit count: 227

Filed under:
|
|

Well I tried to figure out is this possible in any way. Here is code:

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 :(

As you see I tried to create prototype getter. For what? Well if you write something like this:

a=function(text)
{
    var b=text;
    this.getText=function(){ return b}
}

... everything should be fine.. but in fact every time I create object - i create getText function that uses memory. I would like to have one prototypical function lying in memory that would do the same... Any ideas?

EDIT:

I tried solution given by Christoph, and it seems that its only known solution for now. It need to remember id information to retrieve value from context, but whole idea is nice for me :) Id is only one thing to remember, everything else can be stored once in memory. In fact you could store a lot of private members this way, and use anytime only one id. Actually this is satisfying me :) (unless someone got better idea). 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());

© Stack Overflow or respective owner

Related posts about JavaScript

Related posts about prototype