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