Не стандартно
Эта возможность не является стандартной и стандартизировать её пока никто не собирается. Не используйте её на сайтах, смотрящих во внешний мир: она будет работать не у всех пользователей. Также могут присутствовать большие несовместимости между реализациями и её поведение может в будущем измениться.
Сводка
Метод toSource()
возвращает строку, представляющую исходный код объекта.
Синтаксис
Object.toSource();
obj.toSource();
Параметры
Нет.
Описание
Метод toSource()
возвращает следующие значения:
- Для встроенного объекта
Object
, методtoSource()
возвращает следующую строку, указывающую, что исходный код не доступен:function Object() { [native code] }
- Для экземпляров
Object
, методtoSource()
возвращает строку, представляющую исходный код.
Вы можете вызывать метод toSource()
во время отладки для просмотра содержимого объекта.
Переопределение метода toSource()
Вы можете безопасно переопределять метод toSource()
для объектов. Например:
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")
Встроенные методы toSource()
Каждый тип ядра JavaScript имеет свой собственный метод toSource()
. Вот эти объекты:
Array.prototype.toSource()
— метод объектаArray
.Boolean.prototype.toSource()
— метод объектаBoolean
.Date.prototype.toSource()
— метод объектаDate
.Function.prototype.toSource()
— метод объектаFunction
.Number.prototype.toSource()
— метод объектаNumber
.Regexp.prototype.toSource()
— метод объектаRegExp
.String.prototype.toSource()
— метод объектаString
.Symbol.prototype.toSource()
— метод объектаSymbol
.Math.toSource()
— возвращает строку "Math".
Ограничение на циклические объекты
В том случае, если объекты содержат ссылки на самих себя, например циклический связанный список или дерево, которое можно обходить в обоих направлениях, метод toSource()
не создаёт такие ссылки, начиная с Firefox 24. Например:
var obj1 = {}; var obj2 = { a: obj1 }; obj1.b = obj2; console.log('Циклическая ссылка: ' + (obj1.b.a == obj1)); var objSource = obj1.toSource(); // вернёт "({b:{a:{}}})" obj1 = eval(objSource); console.log('Циклическая ссылка: ' + (obj1.b.a == obj1));
Если же вам позарез нужно использовать метод toSource()
для циклической структуры, объект должен предоставить переопределённый метод toSource()
, либо с помощью ссылки на конструктор, либо предоставив анонимную функцию.
Примеры
Пример: использование метода toSource()
Следующий код определяет тип объекта Dog
и создаёт объект theDog
типа Dog
:
function Dog(name, breed, color, sex) { this.name = name; this.breed = breed; this.color = color; this.sex = sex; } theDog = new Dog('Болтушка', 'лабрадор', 'шоколадный', 'девочка');
Вызов метода toSource()
на объекте theDog
отобразит исходный код JavaScript, который определяет объект:
theDog.toSource(); // вернёт ({name:"Болтушка", breed:"лабрадор", color:"шоколадный", sex:"девочка"})
Спецификации
Не является частью какого-либо стандарта. Реализована в JavaScript 1.3.
Совместимость с браузерами
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | ? | (Да) | ? | ? | ? |
Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | ? | ? | (Да) | ? | ? | ? |