【发布时间】:2013-10-06 17:53:54
【问题描述】:
我正在使用下面的代码,它运行良好,但是当我尝试同时使用 JQuery 时,我收到以下错误,我正在阅读一些帖子,我认为问题是不是可以在不检查 hasOwnProperty() 的情况下扩展 Object.prototype,但我不知道如何解决这个问题,有人可以帮帮我吗?
代码:
Object.prototype.clone = function () {
var i, newObj = (this instanceof Array) ? [] : {};
for (i in this) {
if (i === 'clone') {
continue;
}
if (this[i] && typeof this[i] === "object") {
newObj[i] = this[i].clone();
} else {
newObj[i] = this[i];
}
}
return newObj;
};
错误:
Uncaught TypeError: Object function () {
var i, newObj = (this instanceof Array) ? [] : {};
for (i in this) {
if (i === 'clone') {
continue;
}
if (this[i] && typeof this[i] === "object") {
newObj[i] = this[i].clone();
} else {
newObj[i] = this[i];
}
}
return newObj;
} has no method 'exec'
【问题讨论】:
-
在 jsFiddle 你也有错误?
-
我建议不要将该方法放在
Object.prototype上。而是将其作为方法放在Object上,这样它就不会被继承,并将要克隆的对象作为第一个参数传递。Object.clone(foo) -
@Dvir:jsFiddle 跟什么有什么关系?
-
尽量不要修改内置原型,尤其是对象和数组。这里的对象是几乎所有东西的基础,因此您扩展的内容也可用于 Array,但是您可以尝试使用 ecma5 对象定义属性并使该属性的可枚举为 false。试试这个小提琴jsfiddle.net/ywyXS
-
感谢 PSL 修复了错误!
标签: javascript jquery object prototype hasownproperty