实现 JQ 的 each 方法

134 阅读1分钟
//扩展一个叫 each 的属性方法
Object.prototype.each = function (callback){
    //this: 调用方法的实例(数组\类\对象)
    let length = this.length;
    //判断数组和类数组
    if(typeof length === "number" && length - 1 in this){
        for (let i = 0; i < length; i++){
            let item = this[i]
            let result = callback(item, i)
            if(result === false){
                break;
            }
            this[i] = item
        }
        return ;
    }
    //对象
    for (let key in this){
        if(!this.hasOwnProperty(key)){
            break
        }
        let value = this[key]
        let result = callback(value, key)
        if (result === false){
            break;
        }
        this[key] = result
    }
};
[1,2,3,54,6].each(function (item, index){
    console.log(item, index)
});
let obj = {name:'张三',age:'20'}
obj.each(function (item, index){
    console.log(item)
})
document.getElementsByTagName('*').each(function (item, index){
    console.log(item)
})

打印