Non-standard
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
Summary
The toSource()
method returns a string representing the source code of the object.
Syntax
Object.toSource();
obj.toSource();
Parameters
None.
Description
The toSource
method returns the following values:
- For the built-in
Object
object,toSource
returns the following string indicating that the source code is not available:
function Object() { [native code] }
- For instances of
Object
,toSource
returns a string representing the source code.
You can call toSource
while debugging to examine the contents of an object.
Overriding the toSource
method
It is safe for objects to override the toSource
method. For example:
function Person(name) { this.name = name; } Person.prototype.toSource = function Person_toSource() { return "new Person(" + uneval(this.name) + ")"; }; alert(new Person("Joe").toSource()); // ---> new Person("Joe")
Built-in toSource
methods
Each core JavaScript type has its own toSource
method. These objects are:
Array.prototype.toSource()
- Array Object method.Boolean.prototype.toSource()
- Boolean Object method.Date.prototype.toSource()
- Date Object method.Function.prototype.toSource()
- Function Object method.Number.prototype.toSource()
- Number Object method.Regexp.prototype.toSource()
- RegExp Object method.String.prototype.toSource()
- String Object method.Math.toSource()
- Returns the String "Math".
Limitations on cyclical objects
In the case of objects that contain references to themselves, e.g. a cyclically linked list or a tree that can be traversed both ways, toSource
will not recreate the self-reference, as of Firefox 24. For example:
var obj1 = {}; var obj2 = {a: obj1}; obj1.b = obj2; alert("Cyclical: "+(obj1.b.a==obj1)); var objSource = obj1.toSource(); // returns "({b:{a:{}}})" obj1 = eval(objSource); alert("Cyclical: "+obj1.b.a==obj1));
If a cyclical structure is employed and toSource is needed, the object must provide an override to toSource
, either using a reference to a constructor or providing an anonymous function.
Examples
Example: Using toSource
The following code defines the Dog
object type and creates theDog
, an object of type Dog
:
function Dog(name, breed, color, sex) { this.name = name; this.breed = breed; this.color = color; this.sex = sex; } theDog = new Dog("Gabby", "Lab", "chocolate", "girl");
Calling the toSource
method of theDog
displays the JavaScript source that defines the object:
theDog.toSource();
returns
({name:"Gabby", breed:"Lab", color:"chocolate", sex:"girl"})
Specifications
Not part of any standard. Implemented in JavaScript 1.3.
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | ? | (Yes) | ? | ? | ? |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | ? | ? | (Yes) | ? | ? | ? |