复现

// 扩展Array原型
Array.prototype.pip = function(){
    ...
}
// 创建数组实例
var arr = [];
// 使用for...in语句遍历实例
for(let index in arr){
    console.log(index);
}
// 数组实例中并无数据项,但遍历时会将原型方法pip遍历出来

原因

直接通过Array.prototype.pip的方法扩展原型方法,会默认pip方法为可枚举属性,所以会被for...in语句识别并遍历。

解决

Object.defineProperties(Array.prototype, {
    pip: {
      enumerable: false, // 不可枚举
      value: function () {
        ...
      }
    }
})

Level7
87 声望0 粉丝