Hi!
Thank you.

2010/12/3 Sean McArthur <[email protected]>:
> 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
>
>



-- 
with regards,
Maxim

Reply via email to