所以我写了一个扩展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});
并不是说我觉得这条线路有什么特别之处,但我觉得提供它可能会很好。
我在这里做错了吗?
答案 0 :(得分:2)
为什么扩展原生类型的原型可能是一个坏主意的一个教训。 :)
在jQuery
的某个地方,它正在测试一个通用对象是否存在一个名为count
的属性,然后将其视为一个字符串。由于你现在已经使该属性始终存在,它找到了它,但它不是一个字符串(正如它所期望的那样)并破坏了代码。