JavaScript 中不能有一个环境标志,这样您就可以为对象打开一些元数据。
因此,当您调试并获得:
[object Object]
你会得到变量名和类型:
[foo String]
为什么这不可能?
JavaScript 中不能有一个环境标志,这样您就可以为对象打开一些元数据。
因此,当您调试并获得:
[object Object]
你会得到变量名和类型:
[foo String]
为什么这不可能?
有点hacky,但它可以帮助您找到您的对象来源:
function Foo()
{}
var toClass = function(a)
{
var _name = a.constructor.toString().match(/^function (\w+)/i); //\w probably should be enhanced
console.log(_name[1])
}
toClass( new Foo()) //Foo
toClass( [1, 2]) //Array
toClass( new Date()) //Date
toClass( {"a":2}) //Object
旁注:不要toString
仅仅为了调试而覆盖。toString
有它的目的。并且应该被使用,因为它应该被使用。
要直接回答您关于仅翻转“全局标志”而不是更改调试方法的问题:
假设您只在调试期间执行此操作,您可以临时覆盖Object.prototype.toString
以返回对象的 JSON 表示:
Object.prototype.toString = function () { return JSON.stringify(this); };
然后在浏览器控制台中:
var obj = { a: 42 };
console.log('My object: ' + obj);
会给你:
我的对象:{"a":42}
即使这回答了您的问题,我也不建议全局覆盖基本方法,因为它有可能导致灾难性问题。正如其他人在评论中所建议的那样,尝试依赖单元测试和断点+调试。
JSON.stringify
可能是您正在寻找的东西,尽管它不会给您变量的名称——如果没有 3rd 方工具,JavaScript 根本无法做到这一点。
对象的构造函数可以通过使用它的constructor
属性来访问,但不能保证 this 的构造函数属性是可写的。
您可能还想查看该debugger
声明。