Object.prototype.toSource() - JavaScript 编辑
非标准
该特性是非标准的,请尽量不要在生产环境中使用它!
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) + ")";
};
alert(new Person("Joe").toSource()); // ---> new Person("Joe")
内置的toSource方法
每个JavaScript核心类型都有它自己的toSource()
方法.这些对象是:
Array.prototype.toSource()
—Array
object.Boolean.prototype.toSource()
—Boolean
object.Date.prototype.toSource()
—Date
object.Function.prototype.toSource()
—Function
object.Number.prototype.toSource()
—Number
object.RegExp.prototype.toSource()
—RegExp
object.SIMD.%type%.prototype.toSource()
—SIMD
objects.String.prototype.toSource()
—String
object.Symbol.prototype.toSource()
—Symbol
object.Math.toSource()
— Returns the String "Math".
循环引用限制
对于包含对自身的引用的对象 (例如, 循环链表或可以遍历两种方式的树), toSource()
不会重新创建自引用, 如火狐24。例如:
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));
如果使用循环结构, 并且需要 toSource()
, 则对象必须提供对 toSource()
的重写, 无论是对构造函数的引用还是提供匿名函数。
示例
使用toSource()
下面的代码定义了一个Dog
对象类型还创建了一个Dog
类型的对象实例theDog
:
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");
在theDog
上调用toSource
方法会显示出能定义该对象的源码:
theDog.toSource();
// returns ({name:"Gabby", breed:"Lab", color:"chocolate", sex:"female"})
特性
不属于任何标准的一部分。在JavaScript1.3中实现。
浏览器兼容
BCD tables only load in the browser
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.相关链接
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论