Shi*_*ick 16 javascript object node.js
当我Object.prototype在浏览器控制台中执行时,我获得了所有可用的属性和方法Object.prototype.这是预期的,但当我在NodeJS终端执行完全相同的东西时,我得到一个空对象{}.有人可以解释一下为什么会这样吗?我附上了两者的截图.
amr*_*ngh 15
这是因为节点中的console.log()使用util.inspect(),它在对象上使用Object.keys(),并且它仅返回可枚举属性.并Object.prototype 包含不可枚举的属性,这就是它返回空节点的原因.
当我们console.log(Object.prototype)记录一个空的时,可以在下面的代码片段中观察到类似的行为{};
console.log(Object.prototype);Run Code Online (Sandbox Code Playgroud)
但是当我们在其中明确定义一个可枚举属性时,Object.prototype会记录一个包含该属性的对象:
Object.defineProperty(Object.prototype, 'property1', {
value: 42,
enumerable : true
});
console.log(Object.prototype)Run Code Online (Sandbox Code Playgroud)
供参考
顺便说一下,Object.getOwnPropertyNames如果您想知道或访问这些属性,可以使用.
> Object.getOwnPropertyNames(Object.prototype)
[ 'hasOwnProperty',
'constructor',
'toString',
'toLocaleString',
'valueOf',
'isPrototypeOf',
'propertyIsEnumerable',
'__defineGetter__',
'__lookupGetter__',
'__defineSetter__',
'__lookupSetter__',
'__proto__' ]
Run Code Online (Sandbox Code Playgroud)
它不会列出您可能在chrome dev控制台中找到的其他属性,例如作用域或promises的值.但它足够好了!