In fact, even though I just want some public variants, I still have the same
problem.
var obj = {a:1,b:2,c:3 ... some methods...};
obj2 = Object.create(obj);
obj2.a is referred to obj.a, right? If I want another instance, I have to
write obj2.a = 1;
But if the object is very "big"? Write a function to assign all variants? Is
it "constructor"?
Once I implement these all, my prototypal OO still is different from
classical OO?

On Thu, Dec 23, 2010 at 3:14 PM, אריה גלזר <arieh.gla...@gmail.com> wrote:

> 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 <rainco...@gmail.com> 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/jsmentors@jsmentors.com/
>>
>> To search via a non-Google archive, visit here:
>> http://www.mail-archive.com/jsmentors@googlegroups.com/
>>
>> To unsubscribe from this group, send email to
>> jsmentors+unsubscr...@googlegroups.com<jsmentors%2bunsubscr...@googlegroups.com>
>>
>
>
>
> --
> 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/jsmentors@jsmentors.com/
>
> To search via a non-Google archive, visit here:
> http://www.mail-archive.com/jsmentors@googlegroups.com/
>
> To unsubscribe from this group, send email to
> jsmentors+unsubscr...@googlegroups.com<jsmentors%2bunsubscr...@googlegroups.com>
>



-- 
Lai, Yu-Hsuan

-- 
To view archived discussions from the original JSMentors Mailman list: 
http://www.mail-archive.com/jsmentors@jsmentors.com/

To search via a non-Google archive, visit here: 
http://www.mail-archive.com/jsmentors@googlegroups.com/

To unsubscribe from this group, send email to
jsmentors+unsubscr...@googlegroups.com

Reply via email to