0

我正在维护一个现有的应用程序,该应用程序使用一个名为 Jinx 的遗留 JS 框架。我想将 jquery 放在这个应用程序的页面上,问题是:Jinx框架正在扩展 javascript 类型的 'Object' 搞砸了jquery。该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 在页面上运行。

4

1 回答 1

0

jQuery 与使用不安全(ES5 之前)方法添加到Object.prototype. 它使用for ... in ...循环而不使用hasOwnProperty测试,因此添加新属性(或方法)Object.prototype也会导致这些属性的意外枚举。

在您引用的代码中,该Object.extend方法很好 - 这是导致问题的extend添加Object.prototype

如果您可以不用添加到原型中的功能,只需将它们从您的 Jinx 副本中删除。

或者,如果您知道您的代码仅针对现代 ES5 兼容浏览器,您可以使用安全地Object.defineProperty将方法添加为不可枚举属性

Object.defineProperty(Object.prototype, 'extend', {
    value: function() {
        return Object.extend.apply (this, [this, object]);
    }
}); 
于 2013-09-30T06:46:23.173 回答