javascript - 为什么迭代中会出现原型(prototype)函数?

标签 javascript prototype

于是就有了这个功能

Array.prototype.containsCaseInsensitive = function(obj) {
  var i = this.length;
  while (i--) {
    if (this[i].toUpperCase() === obj.toUpperCase()) {
      return true;
    }
  }
  return false;
}

然后我创建这个数组:

ary = [0,1,2,3];
for (item in ary){
  console.log(ary[item])
}

输出如下:

0
1
2
3
function(obj) {
    var i = this.length;
    while (i--) {
       if (this[i].toUpperCase() === obj.toUpperCase()) {
           return true;
       }
    }
    return false;
 }

为什么函数会在迭代中? 谢谢!

最佳答案

您的属性是可枚举的(尽管无论如何您都不应该使用 for ... in ... 枚举数组的键)。

在 ES5 兼容浏览器上,您可以使用 Object.defineProperty 安全地将该函数添加为不可枚举属性。 :

Object.defineProperty(Array.prototype, 'containsCaseInsensitive', {
    value: function() {
        ...
    }
});

关于javascript - 为什么迭代中会出现原型(prototype)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11114068/

相关文章:

javascript - YouTube 嵌入播放器无法在 Javascript 中运行

javascript - 滚动时淡入 - 容器中心

javascript - JavaScript 中的原型(prototype)问题

javascript - 将 JSX 代码存储到 Javascript 变量中的正确方法(如果可能)

javascript - 通过 AJAX 警告消息注入(inject) JavaScript

javascript - 从默认的ng网格中删除列分隔符

javascript - 如何从 JavaScript 中的匿名事件监听器访问对象属性

javascript - 一般使用javascript map函数是什么意思?

javascript - 原型(prototype)继承和扩展现有对象

javascript - 扩展对象导致 jQuery 错误