0

所以我写了一个函数来扩展对象来计算其中有多少条目,所以它可以这样使用:

test = {"foo": "bar", "baz": 7, "darth": "maul"}

test.count()
=> 3

我这样写代码:

Object.prototype.count = function() {
  var count = 0, key;
  for (key in this) {
    if (this.hasOwnProperty(key)) {
      count++;
    }
  }
  return count;
}

这是我第一次尝试使用原型进行扩展,我从 jQuery.js 中得到了这个错误:

Uncaught TypeError: Object function () {
  var count = 0, key;
  for (key in this) {
    if (this.hasOwnProperty(key)) {
      count++;
    }
  }
  return count; 
} has no method 'replace'

stacktrace 指向我css在 jQuery 对象 onLoad 上调用的位置:

$img.css({left: 20, top: 50});

并不是说我认为那条线有什么特别之处,但我认为提供它可能会很好。

我在这里做错了吗?

4

1 回答 1

2

关于为什么扩展本机类型的原型可能是个坏主意的一课。:)

在某处jQuery,它正在测试一个通用对象是否存在名为 的属性count,然后将其视为字符串。由于您现在已经使该属性始终存在,因此它找到了它,但它不是字符串(如预期的那样)并破坏了代码。

于 2012-07-25T18:09:58.553 回答