Debugging support
The 2.1 release introduced support for WebKit’s displayName
property for profiling and debugging JavaScript. Essentially, it is a
workaround for the fact that JavaScript objects and functions do not have
names directly attached to them, and can be referenced by any number of
variables, thus making objects and functions basically anonymous.
WebKit’s profiler and debugger improves the situation by using the
displayName assigned to a Function object if one has been assigned.
JS.Class generates display names for methods and inner classes, so long as you
specify a name for the outermost class. Class (and module) names are optional
and are specified using the first argument to the Class and Module
constructors. For example:
Foo = new JS.Module('Foo', {
sleep: function() { /* ... */ },
extend: {
eatFood: function() { /* ... */ },
InnerClass: new JS.Class({
haveVisions: function() { /* ... */ }
})
}
});
The name does not have to be the same as the variable you assign the module to, although it will probably be more helpful if the names are the same. The name given is not used for variable assignment, though.
Given the above definition, we now find displayName set on the methods and
the inner class:
Foo.instanceMethod('sleep').displayName
// -> "Foo#sleep"
Foo.eatFood.displayName
// -> "Foo.eatFood"
Foo.InnerClass.displayName
// -> "Foo.InnerClass"
Foo.InnerClass.instanceMethod('haveVisions').displayName
// -> "Foo.InnerClass#haveVisions"
Further debugging support is provided by the StackTrace module.