首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有可能覆盖JavaScript的toString()函数来为调试提供有意义的输出?

有没有可能覆盖JavaScript的toString()函数来为调试提供有意义的输出?
EN

Stack Overflow用户
提问于 2011-06-10 22:08:39
回答 13查看 103.2K关注 0票数 128

当我在JavaScript程序中console.log()一个对象时,我只看到输出的[object Object],这对确定它是什么对象(甚至是什么类型的对象)没有多大帮助。

在C#中,我习惯于重写ToString(),以便能够定制对象的调试器表示。我在JavaScript中也可以做类似的事情吗?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2011-06-10 22:13:44

你也可以在Javascript中覆盖toString。请参见示例:

代码语言:javascript
复制
function Foo() {}

// toString override added to prototype of Foo class
Foo.prototype.toString = function() {
  return "[object Foo]";
}

var f = new Foo();
console.log("" + f); // console displays [object Foo]

有关如何在JavaScript中确定对象类型名称的信息,请参阅this讨论。

票数 112
EN

Stack Overflow用户

发布于 2015-07-11 06:56:02

首先覆盖对象或原型的toString

代码语言:javascript
复制
var Foo = function(){};
Foo.prototype.toString = function(){return 'Pity the Foo';};

var foo = new Foo();

然后转换为字符串以查看对象的字符串表示:

代码语言:javascript
复制
//using JS implicit type conversion
console.log('' + foo);

如果您不喜欢额外的输入,您可以创建一个函数,将其参数的字符串表示形式记录到控制台:

代码语言:javascript
复制
var puts = function(){
    var strings = Array.prototype.map.call(arguments, function(obj){
        return '' + obj;
    });
    console.log.apply(console, strings);
};

用法:

代码语言:javascript
复制
puts(foo)  //logs 'Pity the Foo'

puts(foo, [1,2,3], {a: 2}) //logs 'Pity the Foo 1,2,3 [object Object]'

更新

E2015为这些东西提供了更好的语法,但是您必须使用像Babel这样的转译器

代码语言:javascript
复制
// override `toString`
class Foo {
  toString(){
    return 'Pity the Foo';
  }
}

const foo = new Foo();

// utility function for printing objects using their `toString` methods
const puts = (...any) => console.log(...any.map(String));

puts(foo); // logs 'Pity the Foo'
票数 38
EN

Stack Overflow用户

发布于 2011-06-10 22:29:33

在浏览器JS中获得可调试输出的一种简单方法是将对象序列化为JSON。这样你就可以像这样打电话

代码语言:javascript
复制
console.log ("Blah: " + JSON.stringify(object));

举个例子,alert("Blah! " + JSON.stringify({key: "value"}));生成一个文本为Blah! {"key":"value"}的警报

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6307514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档