More info on how `this` works:
http://seanmonstar.com/post/707068021/4-ways-functions-mess-with-this


On Fri, Dec 3, 2010 at 4:51 AM, Maxim Lacrima <[email protected]>wrote:

> Hi Barry!
>
> Thank you very much! Very informative.
>
> On 3 December 2010 14:31, Barry van Oudtshoorn <[email protected]>
> wrote:
> > Hi Maxim,
> >
> > 1. The element will actually be shared by *all* the instances of that
> class.
> > Take a look at http://jsfiddle.net/948G8/ -- you'll notice that the
> element
> > which is injected into the document has the text 'beta'. What you
> probably
> > want to do is something like this:
> >
> > var FooComponent = new Class({
> > elem: null,
> > initialize: function() {
> > this.elem = new Element('div');
> > }
> > })
> >
> > This will mean that every time you instantiate your class, you get a
> > brand-spanking-new element for that instance. (The initialize method is
> > special -- MooTools automatically calls it for you every time you
> > instantiate a class.)
> >
> > 2. Well, in your example, you're actually calling the function
> > getCurrentStatus when you're setting up the class. Take a look at
> > http://jsfiddle.net/t6jk9/ -- you'll see that f1 is called, but f2
> isn't.
> > Now, in a class, when you call a function, "this" can refer to a couple
> of
> > things. Take a look at http://jsfiddle.net/5ncg3/0/ -- you'll see that
> when
> > you call the function "checkThisOut", "this" is dependent on how you're
> > making that call. This is where bind() becomes useful. Take a look at
> > http://jsfiddle.net/5ncg3/1/ -- you'll see that in the console, when we
> call
> > "otherChecker.checkOtherOut", "this" now refers to our original
> ThisChecker
> > instance.
> >
> > 3. The parentheses allow you to execute the function immediately, without
> > bothering to assign it to a variable or make it a member of an object.
> Try
> > executing
> > (function() { console.log('a'); })();
> > in your console, and then try
> > function() { console.log('b') }();
> > -- the second one will throw an error. There are loads of places that
> > running a function as soon as it's declared is useful, as you've noticed
> in
> > the MooTools source!
> >
> > Hope this helped a bit!
> >
> > - Barry
> > www.barryvan.com.au
> >
> > On 3/12/2010 8:10 PM, Maxim Lacrima wrote:
> >>
> >> Hi!
> >>
> >> I'm quite new to javascript and MooTools.
> >> I have a class that looks like following:
> >>
> >> var FooComponent = new Class({
> >>     elem: new Element('div'),
> >>     status: this.getCurrentStatus()
> >> });
> >>
> >> Two questions:
> >> 1) When I access elem property as FooComponent.elem, will Element be
> >> instantiated only once (when I access it for the first time) or is it
> >> instantiated each time I access elem property?
> >> 2) When I access status property, which object does 'this' belongs to?
> >>
> >> And one more general javascript question. What does a function wrapped
> >> in parentheses mean in javascript? This can be often found in MooTools
> >> source code:
> >> (function(){
> >>     // function body
> >> })();
> >>
> >> Thanks in advance.
> >> Sorry for my English.
> >>
> >
> >
> > --
> > Not sent from my Apple πPhone
> >
> >
>
>
>
> --
> with regards,
> Maxim
>

Reply via email to