This is exacatly the point - you create the methods and the variable
together, so either you get a copy of all of them, or you get a new
instance.
But if you want a 'private' variable for each instance, the only way you are
going to achieve this (I think) is by creating a separate closure for each
object creation. So you can either do the above second solution, or you can
do
var obj = {
        getA : function getA() {
            return this.a;
        },
        setA : function setA(b) {
            a = this.b;
        }
    };

function F(){ this.a = 'a';}
for (i =0; i<10;i++) x.push((function(){ F.prototype = obj; return new
F();})();

And you will still be exposing a in the end. But the point is, this is much
less readable and performance-wise I don't think it really matters, so your
second pattern is good enough IMO.

note - this list beeing so heavy on js wizards, I'm always a little afraid
of posting comments here...


On Thu, Dec 23, 2010 at 8:23 AM, Yu-Hsuan Lai <[email protected]> wrote:

> I'm trying use prototypal inheritance instead of classical one. But I'm
> still confused.
> I can't complete very very very small tasks, like this one:
> Create 10 copies of a object(with a private variant and public functions to
> access it) in an array.
>
> I have two way to approach it, first is to use Object#create:
> var x=[];
> x[0]=(function () {
>     var a=10;
>     return {
>         getA : function getA() {
>             return a;
>         },
>         setA : function setA(b) {
>             a = b;
>         }
>     };
> })();
> for(var i=1; i<10; i++)
>     x[i] = Object.create(x[0]);
>
> But all 10 objects' "a"s refer to a single integer. Tragedy.
> My second way is call a function which return a object 10 times:
> function createX() {
>     var a=10;
>     return {
>         getA : function getA() {
>             return a;
>         },
>         setA : function setA(b) {
>             a = b;
>         }
>     };
> }
> var x=[];
> for(var i=0; i<10; i++)
>     x[i] = createX();
>
> It works. But every x has its own "getA" and "setA" instance. In contrast
> to the former, it costs more memory.
> I know it maybe doesn't matter. But knowing prototypal OO can use only one
> instance, creating 10 let me regard me as a stupid.
>
> Except the two methods, the only one method I can figure out is...
> classical OO.
> Is it avoidable?
>
>
>
> --
> Lai, Yu-Hsuan
>
> --
> To view archived discussions from the original JSMentors Mailman list:
> http://www.mail-archive.com/[email protected]/
>
> To search via a non-Google archive, visit here:
> http://www.mail-archive.com/[email protected]/
>
> To unsubscribe from this group, send email to
> [email protected]<jsmentors%[email protected]>
>



-- 
Arieh Glazer
אריה גלזר
052-5348-561
http://www.arieh.co.il
http://www.link-wd.co.il

-- 
To view archived discussions from the original JSMentors Mailman list: 
http://www.mail-archive.com/[email protected]/

To search via a non-Google archive, visit here: 
http://www.mail-archive.com/[email protected]/

To unsubscribe from this group, send email to
[email protected]

Reply via email to