# getSymbolsIn
# Description
拿到 object
的可枚举 symbol
数组,同时会处理原型链上所有可枚举的 symbol
# Params
{Object} object
# Return
Array
# Depend
import getSymbols from './getSymbols.js'
# Code
function getSymbolsIn(object) {
const result = []
while (object) {
result.push(...getSymbols(object))
object = Object.getPrototypeOf(Object(object))
}
return result
}
# Analyze
- 定义空数组用来接收结果
- 使用
while
循环,结束条件为object
为真,所以没有一开始处理object == null
的情况 - 使用展开运算符,拿到
getSymbols
返回数据的每一项,扁平化result
Object.getPrototypeOf()
方法返回指定对象的原型(内部 [[Prototype]] 属性的值)。Object.getPrototypeOf
在获取object
的原型,每一次都会重新赋值object
, 到最终会返回null
,也就是while
条件的结束- 返回得到的
symbol
结果数组
# Remark
# Example
function A () {
;[1,2,3,4,5].forEach(k => {
Object.defineProperty(this, Symbol(k), {
'enumerable': true,
'value': k,
})
})
}
const b = new A()
Object.defineProperty(b, Symbol(7), {
'value': 7,
'enumerable': true,
})
console.log(getSymbolsIn(b)) // [ Symbol(1), Symbol(2), Symbol(3), Symbol(4), Symbol(5), Symbol(7) ]
← getSymbols getTag →