Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #16202

Re: Who's eaten my apple and why?

From Stefan Weiss <krewecherl@gmail.com>
Newsgroups comp.lang.javascript
Subject Re: Who's eaten my apple and why?
Date 2012-09-27 21:40 +0200
Organization albasani.net
Message-ID <k42a3d$3ni$1@news.albasani.net> (permalink)
References (3 earlier) <k40ct8$fmi$1@news.albasani.net> <kde7681jjln1ffu43grf11thd274pqkokf@4ax.com> <k41bjn$bdg$1@speranza.aioe.org> <pmv868t6raj29735oalaj0imefgpsj8uh1@4ax.com> <k421h5$7ka$1@speranza.aioe.org>

Show all headers | View raw


On 2012-09-27 19:14, Christoph Becker wrote:
> Gene Wirchenko wrote:
>>      What on earth does this mean?  What gets stored in the tree when
>> the method is called?
>> 
>>      An object reference?  Then, why does nulling the object not
>> change the display?
> 
> Yes, indeed the reference to the object is stored.  But when you set the
> variable containing the object reference to null later, the stored
> object reference isn't affected (IIRC Stefan had already explained
> that).  This has nothing to do with the DOM, but with the semantics of
> ECMAScript.
> 
> IOW: you can't null any object.  You only can set a variable which
> contains a reference to an object to null.  This doesn't affect the
> object itself, only the variable changes.  If all references to an
> existing object are gone, the object might be garbage collected (but
> that is semantically irrelevant).

Right.

I was talking about reference types with a co-worker a couple of months
ago, and we found an analogy that seemed to help:

One can imagine variables as small envelopes, just large enough to hold
a single piece of paper. Some things can fit on this piece of paper
entirely, like numbers and strings, others are too large, like objects.

When you create an object, it's like handing your cloak (the object) to
a checkroom attendant. He will put the cloak on a rack and hand you a
paper receipt to identify it later. You put this piece of paper in your
envelope: your variable now contains a reference to an object.

Now you can use this receipt to access your cloak anytime. You can copy
the receipt to another envelope and it will still work. You can show it
to other attendants (methods), who will copy it from you and can now
also access your cloak.

When you empty your envelope, you lose the reference. The cloak still
exists, but you won't be able to find it again. After a while, the
checkroom attendant may (or may not) notice that this cloak has been
hanging around for weeks, and will throw it away (objects with a
reference count of zero may be garbage collected).

The analogy is getting a little stretched now, but bear with me...

When you write options.add(o), that's like showing your receipt to an
attendant and saying "take this cloak from wherever it is and hang it on
the tree outside" (the DOM tree). You can do that any number of times,
but in the end your cloak will be hanging on the tree only once. If you
put something else in your envelope, like a blank piece of paper (o =
null), the cloak on the tree is unaffected by this. You just don't have
an easy way to find it again.


- stefan

Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Who's eaten my apple and why? justaguy <lichunshen84@gmail.com> - 2012-09-26 14:43 -0700
  Re: Who's eaten my apple and why? Christoph Becker <cmbecker69@gmx.de> - 2012-09-27 01:35 +0200
    Re: Who's eaten my apple and why? justaguy <lichunshen84@gmail.com> - 2012-09-26 17:46 -0700
      Re: Who's eaten my apple and why? Stefan Weiss <krewecherl@gmail.com> - 2012-09-27 03:51 +0200
        Re: Who's eaten my apple and why? justaguy <lichunshen84@gmail.com> - 2012-09-26 19:44 -0700
          Re: Who's eaten my apple and why? Stefan Weiss <krewecherl@gmail.com> - 2012-09-27 22:06 +0200
    Re: Who's eaten my apple and why? Gene Wirchenko <genew@ocis.net> - 2012-09-26 17:59 -0700
      Re: Who's eaten my apple and why? Stefan Weiss <krewecherl@gmail.com> - 2012-09-27 04:16 +0200
        Re: Who's eaten my apple and why? Gene Wirchenko <genew@ocis.net> - 2012-09-26 19:38 -0700
          Re: Who's eaten my apple and why? Stefan Weiss <krewecherl@gmail.com> - 2012-09-27 05:44 +0200
            Re: Who's eaten my apple and why? Gene Wirchenko <genew@ocis.net> - 2012-09-27 09:28 -0700
              Re: Who's eaten my apple and why? Tim Streater <timstreater@greenbee.net> - 2012-09-27 17:40 +0100
                Re: Who's eaten my apple and why? Gene Wirchenko <genew@ocis.net> - 2012-09-27 16:24 -0700
              Re: Who's eaten my apple and why? Dr J R Stockton <reply1239@merlyn.demon.co.uk.invalid> - 2012-09-29 20:47 +0100
          Re: Who's eaten my apple and why? Christoph Becker <cmbecker69@gmx.de> - 2012-09-27 13:00 +0200
            Re: Who's eaten my apple and why? Gene Wirchenko <genew@ocis.net> - 2012-09-27 09:34 -0700
              Re: Who's eaten my apple and why? Christoph Becker <cmbecker69@gmx.de> - 2012-09-27 19:14 +0200
                Re: Who's eaten my apple and why? Stefan Weiss <krewecherl@gmail.com> - 2012-09-27 21:40 +0200
                Re: Who's eaten my apple and why? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-09-28 15:39 +0200
                Re: Who's eaten my apple and why? Gene Wirchenko <genew@ocis.net> - 2012-09-27 16:25 -0700
      Re: Who's eaten my apple and why? Tim Streater <timstreater@greenbee.net> - 2012-09-27 08:52 +0100
  Re: Who's eaten my apple and why? Gene Wirchenko <genew@ocis.net> - 2012-09-26 17:50 -0700

csiph-web