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
