我正在维护一个使用名为Jinx的旧JS框架的现有应用程序。我想在这个应用程序的页面上放置jquery,问题是:Jinx
框架正在扩展混淆jquery
的javascript类型'Object'。 noConflict()
功能
没有解决这个问题。
以下是该方案:
1)声明jquery
2)声明jquery-ui插件
3)声明jinx javascript框架
4)页面内容和多个javascript调用
5)调用jquery-ui函数,即:('#calendar')。datepicker();
6)javascript失败:
Uncaught TypeError: Object function (object)
{
return Object.extend.apply (this, [this, object]);
} has no method 'push'
Jinx.js中的代码块导致问题(对此处发生的事情没有深入了解):
Object.extend = function (destination, source)
{
for (property in source)
{
destination[property] = source[property];
}
return destination;
}
Object.prototype.extend = function (object)
{
return Object.extend.apply (this, [this, object]);
}
有人可以想到一个解决方法吗?非常需要在页面上运行jquery。
答案 0 :(得分:0)
jQuery与使用不安全(pre-ES5)方法添加到Object.prototype
的库不兼容。它使用for ... in ...
循环而不使用hasOwnProperty
测试,因此向Object.prototype
添加新属性(或方法)也会导致无意中枚举这些属性。
在您引用的代码中,Object.extend
方法很好 - 这是extend
添加到Object.prototype
导致问题的原因。
如果你没有添加到原型的功能,只需从你的Jinx副本中删除它们。
或者,如果您知道您的代码仅定位到现代ES5兼容浏览器,则可以{\ n} {x>} 安全将该方法添加为非可枚举属性:
Object.defineProperty(Object.prototype, 'extend', {
value: function() {
return Object.extend.apply (this, [this, object]);
}
});