JINX Javascript框架扩展Object导致jQuery出现问题

时间:2013-08-03 06:31:41

标签: javascript jquery

我正在维护一个使用名为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。

1 个答案:

答案 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]);
    }
});