1
0
Fork 0

Added static property documentation

closure/master
Mike Gerwitz 2011-05-15 09:38:24 -04:00
parent c64c6bb964
commit edac0e1667
1 changed files with 58 additions and 0 deletions

View File

@ -1158,4 +1158,62 @@ called in the context of an instance, it is still part of the class. As such,
@node Static Properties
@subsection Static Properties
You have likely noticed by now that static properties are handled a bit
differently than both static methods and non-static properties. This difference
is due to pre-ECMAScript 5 limitations and is discussed at length in the
@ref{Static Implementation} section.
Static properties are read from and written to using the @dfn{static accessor
method} @code{$()}. This method name was chosen because the @code{$} prefix is
common in scripting languages such as BASH, Perl (for scalars) and PHP. The
accessor method accepts two arguments, the second being optional. If only the
first argument is provided, the accessor method acts as a getter, as in
@ref{f:static-ex}'s @code{getTotalCount()}:
@verbatim
return this.$('_count');
@end verbatim
If the second argument is provided, it acts as a setter, as in
@code{__construct()}:
@verbatim
this.__self.$( '_count',
this.__self.$('count') + 1
);
@end verbatim
Setting @code{undefined} values is supported. The @code{delete} operator is not
supported, as its use is both restricted by the language itself and doesn't make
sense to use in this context. As hinted by the example above, the increment and
decrement operators (@code{++} and @code{--}) are not supported because
JavaScript does not permit returning values by reference.
It is important to understand that, currently, the accessor method cannot be
omitted. Consider the following example:
@float Figure, f:static-accessor
@verbatim
var Foo = Class( 'Foo',
{
'public static bar': 'baz',
},
SubFoo = Class( 'SubFoo' ).extend( Foo, {} )
;
// correct
Foo.$( 'bar, 'baz2' );
Foo.$('bar'); // baz2
SubFoo.$('bar'); // baz2
SubFoo.$( 'bar', 'baz3' );
Foo.$('bar'); // baz3
// INCORRECT
Foo.bar = 'baz2';
Foo.bar; // baz2
SubFoo.bar; // undefined
@end verbatim
@caption{Static accessor method cannot be omitted}
@end float