js的object对象实现扩展运算符的基本方法

我们知道,js的数组是可以使用展开运算符展开数据的,原因是Array具有Symbol.iterator迭代器接口,但是对象是没有该迭代器接口的,如果直接用[...]展开运算符展开对象是报错的

js的object对象实现扩展运算符的基本方法_第1张图片

1、 实现方法

之所以使用Reflect.ownKeys来获取obj的key值而不是采用Object.keys(),是因为假如obj有symbol属性时,后者是没有办法获取值的

let obj = {name: 'cch', age: 23, number: 23}
obj[Symbol.iterator] = function(){
    return {
        next: function () {
            let keyArr = Reflect.ownKeys(obj)
            if(this.index < keyArr.length - 1){
                let key = keyArr[this.index]
                this.index++
                return {
                    value: obj[key]
                }
            } else {
                return {done: true}
            }
        },
        index: 0
    }
}
console.log([...obj])

 js的object对象实现扩展运算符的基本方法_第2张图片

2、Reflect.ownKeys() 与 Object.keys() 的区别

 js的object对象实现扩展运算符的基本方法_第3张图片

你可能感兴趣的:(JavaScript,javascript)