【问题标题】:What does light purple mean in Chrome's console?Chrome 控制台中的浅紫色是什么意思?
【发布时间】:2019-04-28 10:46:06
【问题描述】:
浅紫色和紫色有什么区别?
谢谢。
背景:
我试图从数组类型中提取所有 proto 函数。
const arrayProto = Array.prototype
const arrayMethods = Object.create(arrayProto)
arrayMethods 返回Array {}
我发现所有方法都在 proto(浅紫色)中,而没有一个被计算在内。如果我将 arrayProto 更改为像 [1,2,3] 这样的普通数组,我可以得到arrayMethods[i] 中的数字,因为所有数字都列在 proto 中。
我的第一个想法是浅紫色的被忽略或不属于arrayMethods。但是我找不到关于这部分控制台的任何文件。
为什么以及如何解决?
【问题讨论】:
标签:
javascript
google-chrome
console
【解决方案1】:
在 JavaScript 中,属性可能是可枚举的,也可能不是。 for-in 循环或Object.keys() 会忽略不可枚举的属性。所有内置方法都是不可枚举的。 (这就是为什么 for-in 没有为每个对象列出 Object.prototype 上的所有方法。)
Chrome 似乎使用深紫色表示可枚举属性,使用浅紫色表示不可枚举。他们不需要被继承。演示(来自 Chrome 73.0.3683.103 的屏幕截图):
Object.defineProperties({}, {
foo: {enumerable: true, value: 1},
bar: {enumerable: false, value: 2},
});
如果你想获取一个对象的属性,包括不可枚举的属性,你可以使用Object.getOwnPropertyNames(o)。但是,如果要查找继承的属性,则需要自己遵循原型链。