我最接近Python' repr 的东西是:
function User(name, password){
this.name = name;
this.password = password;
}
User.prototype.toString = function(){
return this.name;
};
var user = new User('example', 'password');
console.log(user.toString()) // but user.name would be even shorter
默认情况下有没有办法将object
表示为字符串?或者我将不得不使用object.variable
来获得我想要的结果?
答案 0 :(得分:20)
JSON.stringify
可能是您从本地图书馆获得的最接近的。它不适用于对象,但您可以定义自己的代码来解决这个问题。我搜索了提供此功能但没有找到任何内容的库。
答案 1 :(得分:10)
console.log
方法来覆盖 inspect()
Javascript对象的表示
例如:
function User(name, password){
this.name = name;
this.password = password;
}
User.prototype.toString = function(){
return this.name;
};
User.prototype.inspect = function(){ return 'Model: ' + this.name ; }
- 谢谢'Ciro Santilli'
答案 2 :(得分:6)
<强> util.inspect
强>
http://nodejs.org/api/util.html#util_util_inspect_object_options
var util = require('util');
console.log(util.inspect({ a: "0\n1", b: "c"}));
输出:
{ a: '0\n1', b: 'c' }
答案 3 :(得分:2)
String(user)
是我能想到的最好的。我认为另一种选择可能是找到第三方库来处理为对象创建人类可读的演示文稿。
答案 4 :(得分:2)
答案 5 :(得分:0)
正如安德鲁约翰逊所说,JSON.stringify
可能是最接近开箱即用的。{/ p>
repr的一个常见策略是strict mode。如果你想这样做,output runnable Python code(eval
的对面)是个不错的选择。
示例:
var escodegen = require('escodegen')
var lave = require('lave')
function User(name, password){
this.name = name;
this.password = password;
}
var user = new User('example', 'password');
console.log(lave(user, {generate: escodegen.generate}));
输出(不像我希望的那样优雅!):
var a = Object.create({ 'constructor': function User(name, password){
this.name = name;
this.password = password;
} });
a.name = 'example';
a.password = 'password';
a;
答案 6 :(得分:0)
这是NodeJS的解决方案(不确定浏览器)。正如https://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_inspect_object_options所说,您可以将inspect(depth, opts)
添加到您的课程中,并且在您console.log(user_class_instance);
因此这应该可以解决问题:
User.prototype.inspect = function(depth, opts){
return this.name;
};
答案 7 :(得分:0)
节点v6.6.0引入了util.inspect.custom符号:它是可通过Symbol.for('nodejs.util.inspect.custom')
访问的全局注册符号。可以用来声明自定义检查功能。
这是一个有关OP情况的用法示例:
function User(name, password){
this.name = name;
this.password = password;
this[Symbol.for('nodejs.util.inspect.custom')] = () => this.name;
}
var user = new User('example', 'password');
console.log(user) // 'example'