Extending Object导致jQuery错误

时间:2012-07-25 18:07:39

标签: javascript jquery function prototype

所以我写了一个扩展Objects的函数来计算它们中有多少条目,因此它可以这样使用:

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指向我在jQuery对象onLoad上调用css的地方:

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

并不是说我觉得这条线路有什么特别之处,但我觉得提供它可能会很好。

我在这里做错了吗?

1 个答案:

答案 0 :(得分:2)

为什么扩展原生类型的原型可能是一个坏主意的一个教训。 :)

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