这篇翻译不完整。请帮忙从英语翻译这篇文章

非标准
该特性是非标准的,请尽量不要在生产环境中使用它!

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()方法.这些对象是:

循环引用限制

对于包含对自身的引用的对象 (例如, 循环链表或可以遍历两种方式的树), 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中实现。

浏览器兼容

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support No No Yes No No No
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic support No No No Yes No No No

相关链接

文档标签和贡献者

 此页面的贡献者: qiu_han, zhangchen, xgqfrms-GitHub, keller0, teoli, ziyunfei
 最后编辑者: qiu_han,