Object.prototype.toSource()
Не стандартно: Эта возможность не является стандартной и стандартизировать её пока никто не собирается. Не используйте её на сайтах, смотрящих во внешний мир: она будет работать не у всех пользователей. Также могут присутствовать большие несовместимости между реализациями и её поведение может в будущем измениться.
Метод toSource()
возвращает строку, представляющую исходный код объекта.
Синтаксис
Object.toSource(); obj.toSource();
Параметры
Нет.
Описание
Метод toSource()
возвращает следующие значения:
- Для встроенного объекта
Object
, методtoSource()
возвращает следующую строку, указывающую, что исходный код не доступен:js
function Object() { [native code] }
- Для экземпляров
Object
, методtoSource()
возвращает строку, представляющую исходный код.
Вы можете вызывать метод toSource()
во время отладки для просмотра содержимого объекта.
Переопределение метода toSource()
Вы можете безопасно переопределять метод toSource()
для объектов. Например:
js
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()
Non-standard — метод объектаArray
.Boolean.prototype.toSource()
Non-standard — метод объектаBoolean
.Date.prototype.toSource()
Non-standard — метод объектаDate
.Function.prototype.toSource()
Non-standard — метод объектаFunction
.Number.prototype.toSource()
Non-standard — метод объектаNumber
.Regexp.prototype.toSource()
Non-standard — метод объектаRegExp
.String.prototype.toSource()
Non-standard — метод объектаString
.Symbol.prototype.toSource()
(en-US) Non-standard — метод объектаSymbol
.Math.toSource()
— возвращает строку "Math".
Ограничение на циклические объекты
В том случае, если объекты содержат ссылки на самих себя, например циклический связанный список или дерево, которое можно обходить в обоих направлениях, метод toSource()
не создаёт такие ссылки, начиная с Firefox 24. Например:
js
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
:
js
function Dog(name, breed, color, sex) {
this.name = name;
this.breed = breed;
this.color = color;
this.sex = sex;
}
theDog = new Dog('Болтушка', 'лабрадор', 'шоколадный', 'девочка');
Вызов метода toSource()
на объекте theDog
отобразит исходный код JavaScript, который определяет объект:
js
theDog.toSource();
// вернёт ({name:"Болтушка", breed:"лабрадор", color:"шоколадный", sex:"девочка"})
Спецификации
Не является частью какого-либо стандарта. Реализована в JavaScript 1.3.