背景:
我试图从数组类型中提取所有 proto 函数。
const arrayProto = Array.prototype
const arrayMethods = Object.create(arrayProto)
arrayMethods
返回Array {}
我发现所有方法都在 proto (浅紫色)中,但没有计算在内。如果将arrayProto
更改为[1,2,3]之类的常规数组,可以通过arrayMethods [i]获取数字,因为所有数字都在 proto 中列出。
我首先想到的是浅紫色的那些被忽略,或者不属于arrayMethods
。但是,我找不到有关控制台这一部分的任何文档。
为什么以及如何解决?
答案 0 :(得分:1)
答案 1 :(得分:1)
在JavaScript中,属性可能可枚举。 for-in循环或(let [{firstthing 10, lastthing 30} (seq '(10 2 30 ))] [firstthing lastthing])
; Execution error (IllegalArgumentException) at user/eval367 (REPL:1).
; No value supplied for key: 30
将忽略不可枚举的属性。所有内置方法都是不可枚举的。 (这就是为什么for-in不会列出每个对象在Object.keys()
上的所有方法的原因。)
Chrome似乎使用深紫色表示可枚举的属性,并使用浅紫色表示不可枚举的属性。它们不需要被继承。演示(Chrome 73.0.3683.103的截图):
Object.prototype
如果要获取对象的属性,甚至包括无数的属性,都可以使用Object.defineProperties({}, {
foo: {enumerable: true, value: 1},
bar: {enumerable: false, value: 2},
});
。但是,如果要查找继承的属性,则需要自己遵循原型链。