Javascript jQuery与本机原型冲突

Javascript jQuery与本机原型冲突,javascript,jquery,prototype,conflict,Javascript,Jquery,Prototype,Conflict,我在将jQuery与本机JavaScript(NOTprototype.js)一起使用时遇到问题。使用以下代码时,jQuery 1.9.1会显示一条错误消息: Object.prototype.myVeryGreatFunction = function() { // ... } [Error] TypeError: undefined is not a function (evaluating 'U[a].exec(s)') ft (jquery.min.js, line 4) wt

我在将jQuery与本机JavaScript(NOTprototype.js)一起使用时遇到问题。使用以下代码时,jQuery 1.9.1会显示一条错误消息:

Object.prototype.myVeryGreatFunction = function() {
    // ...
}

[Error] TypeError: undefined is not a function (evaluating 'U[a].exec(s)')
ft (jquery.min.js, line 4)
wt (jquery.min.js, line 4)
st (jquery.min.js, line 4)
find (jquery.min.js, line 4)
init (jquery.min.js, line 3)
b (jquery.min.js, line 3)
(anonymous function) (read.control.js, line 59)
c (jquery.min.js, line 3)
fireWith (jquery.min.js, line 3)
ready (jquery.min.js, line 3)
H (jquery.min.js, line 3)
当我删除原型定义时,一切都很好。不幸的是,我无法轻松地更新jQuery,因为它位于CMS的插件中,因此出于兼容性原因,它必须与旧版本一起工作

有没有已知的问题或解决方法


谷歌实际上向我展示了一些解决方案,比如使用
jQuery.noConflict()
和私有函数包装。但是如上所述,我没有使用prototype.js,而是使用原生对象原型。

您可以通过将原生原型的扩展设置为不可枚举来避免这些问题:

Object.defineProperty(Object.prototype, 'myVeryGreatFunction',{
  value : function() {},
  enumerable : false
});
Object.defineProperty
上的文档


正如Jan Dvorak所提到的,此解决方案不适用于旧浏览器(IE8-)。

在旧浏览器中没有安全的方法来扩展
对象。prototype
,而不破坏jQuery。jQuery的作者明确地说(在某处…),如果您只是向
Object.prototype
添加新的可枚举属性,jQuery就会崩溃

唯一的安全方法需要ECMAScript 5及其
Object.defineProperty
函数,该函数允许向对象添加不可枚举的属性


jQuery
noconflict()
函数没有帮助-它是一个完全不同问题的解决方案。

您能给我们提供一个可能重复的图例吗!谢谢分享。