Web/JavaScript/Reference/Global objects/Object/toSource
ObsoleteThis feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
The toSource() method returns a string representing the source code of the object.
Syntax
Object.toSource(); obj.toSource();
Return value
A string representing the source code of the object.
Description
The toSource() method returns the following values:
For the built-in
Objectobject,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) + ')';
};
console.log(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()—Arrayobject.Boolean.prototype.toSource()—Booleanobject.Date.prototype.toSource()—Dateobject.Function.prototype.toSource()—Functionobject.Number.prototype.toSource()—Numberobject.RegExp.prototype.toSource()—RegExpobject.String.prototype.toSource()—Stringobject.Symbol.prototype.toSource()—Symbolobject.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;
console.log('Cyclical: ' + (obj1.b.a == obj1));
var objSource = obj1.toSource(); // returns "({b:{a:{}}})"
obj1 = eval(objSource);
console.log('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
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', 'female');
Calling the toSource() method of theDog displays the JavaScript source that defines the object:
theDog.toSource();
// returns ({name:"Gabby", breed:"Lab", color:"chocolate", sex:"female"})
Specifications
Not part of any standard.
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Chrome
No support No |
Edge
No support No |
Firefox No support 1 — 74 No support 1 — 74 Notes' Starting in Firefox 74, |
IE
No support No |
Opera
No support No |
Safari
No support No |
WebView Android
No support No |
Chrome Android
No support No |
Firefox Android
Full support 4 |
Opera Android
No support No |
Safari iOS
No support No |
Samsung Internet Android
No support No |
nodejs
No support No |
Legend
- Full support
- Full support
- No support
- No support
- Non-standard. Expect poor cross-browser support.'
- Non-standard. Expect poor cross-browser support.
- Deprecated. Not for use in new websites.'
- Deprecated. Not for use in new websites.
- See implementation notes.'
- See implementation notes.
See also
Object.prototype.toSource() by Mozilla Contributors is licensed under CC-BY-SA 2.5.