在浏览器控制台中执行Object.prototype
时,我将获得Object.prototype
内部所有可用的属性和方法。这符合预期,但是当我在NodeJS终端中执行完全相同的操作时,我得到的是空对象{}
。谁能解释一下为什么会这样?我已经附上了两者的屏幕截图。
答案 0 :(得分:14)
这是因为节点中的console.log()使用util.inspect(),该对象在对象上使用Object.keys(),并且仅返回可枚举的属性。并且.schedule-content {
position: relative;
display: block;
opacity: 0;
height: 0;
overflow: hidden;
visibility: hidden;
-webkit-transition: 0.3s;
-o-transition: 0.3s;
transition: 0.3s;
}
.schedule-content.active {
opacity: 1;
height: auto;
visibility: visible;
overflow: visible;
}
包含不可枚举的属性,这就是为什么它返回空节点的原因。
在以下代码段中可以观察到类似的行为,当我们Object.prototype
记录一个空的console.log(Object.prototype)
时
{}
但是,当我们在console.log(Object.prototype);
中显式定义一个可枚举的属性时,它将记录一个包含该属性的对象:
Object.prototype
答案 1 :(得分:7)
如果您想了解或访问这些属性,可以使用Object.getOwnPropertyNames
。
> Object.getOwnPropertyNames(Object.prototype)
[ 'hasOwnProperty',
'constructor',
'toString',
'toLocaleString',
'valueOf',
'isPrototypeOf',
'propertyIsEnumerable',
'__defineGetter__',
'__lookupGetter__',
'__defineSetter__',
'__lookupSetter__',
'__proto__' ]
它不会列出您可能在chrome开发者控制台中找到的其他属性,例如范围或promises的值。但这已经足够了!