Javascript 扩展对象导致jQuery错误

Javascript 扩展对象导致jQuery错误,javascript,jquery,function,prototype,Javascript,Jquery,Function,Prototype,因此,我编写了一个函数来扩展对象,以计算其中有多少条目,因此可以这样使用: 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++;

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

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;
}
这是我第一次尝试使用prototype进行扩展,我从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});
我并不认为这条线路有什么特别之处,但我认为提供这条线路可能会很好


这里有什么地方我做错了吗?

关于为什么扩展本机类型的原型是个坏主意的教训。:)


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

我已将函数名更改了几次,使其随机出现,结果相同。所以,这是否意味着在使用jQuery时不可能扩展对象?我可以将其编写为一个直接函数,但扩展对我来说更有意义(与字符串的
length
相比),它可以查找它不希望存在的任何属性。改变
对象的原型(以及其他类型的原型)几乎是一个普遍的坏主意,因为这会影响检查对象属性的所有内容。类似于if(myobject.count){…}的代码实际上是测试属性存在性的标准。如果你真的想在一个泛型对象上使用自定义方法,那么只需创建你自己的原型并使用它而不是本机对象。谢谢你的帮助。。对于(
css
方法)中出现的这个错误,我想说的是,这可能也是jQuery中的草率代码的一个例子。它应该使用
hasOwnProperty
来迭代属性,但似乎没有。但这并没有改变规则;将您自己的方法或属性添加到
对象
中的风险太大,仅使用点符号测试对象并不被认为是不好的做法(因此,像
count
这样的通用名称可能会让您在编写得非常好的代码中也会绊倒)