在此代码中:
function Cls() {
this._id = 0;
Object.defineProperty(this, 'id', {
get: function() {
return this._id;
},
set: function(id) {
this._id = id;
},
enumerable: true
});
};
var obj = new Cls();
obj.id = 123;
console.log(obj);
console.log(obj.id);
我希望获得{_ id:123,id:123}但是我得到了{_ id:123,id:[获取程序/设置程序]}
是否有办法让console.log函数使用getter值?
7条答案
按热度按时间5lwkijsr1#
您可以使用
console.log(Object.assign({}, obj));
6ovsh4lw2#
使用
console.log(JSON.stringify(obj));
9o685dep3#
从Nodejs v11.5.0开始,你可以在
util.inspect
选项中设置getters: true
。吸气剂|如果设置为true,则检查getter。如果设置为“get”,则仅检查没有相应setter的getter。如果设置为“set”,则仅检查具有相应setter的getter。这可能会导致副作用,具体取决于getter函数。默认值:错。
pgpifvop4#
您可以在对象上定义一个
inspect
方法,并导出您感兴趣的属性。请参阅此处的文档:https://nodejs.org/api/util.html#util_custom_inspection_functions_on_objects我猜它看起来会像这样:
jckbn6z75#
我需要一个没有getter和setter的漂亮的打印对象,但是普通的JSON产生了垃圾。对我来说,在给
JSON.stringify()
一个特别大的嵌套对象之后,JSON字符串太长了。我希望它看起来和行为都像控制台中的普通字符串化对象。所以我再次解析了它:好了。如果你有更简单的方法,告诉我。
58wvjzkj6#
在Node.js上,我建议使用util.inspect.custom,这将允许您将getter漂亮地打印为值,同时保持其他属性输出不变。
它将只应用于您的特定对象,并且不会扰乱常规console.log输出。
相对于
Object.assign
的主要好处是它发生在你的对象上,所以你可以保留常规的通用console.log(object)
语法,而不必用console.log(Object.assign({}, object))
Package 它。将以下方法添加到对象中:
下面是您的环境中的一个工作示例:
输出:
p4tfgftt7#
使用展开运算符: