javascript – jQuery扩展Object.prototype =“c.replace不是函数”

我在我的开源项目中使用jQuery 1.5,以下行也出现在我自己的Javascript代码中:

/**
 * Object.isEmpty()
 *
 * @returns {Boolean}
 */
Object.prototype.isEmpty = function ()
{
    /**
     * @deprecated Since Javascript 1.8.5
     * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object
     */
    if ( this.__count__ !== undefined )
    {
        return this.__count__ === 0 ? true : false;
    }

    /* Less-aesthetic method,if above method fails */
    for ( var property in this )
    {
        if ( this.hasOwnProperty(property) )
        {
            return false;
        }
    }
    return true;
};

它只是扩展了Object.prototype,为它添加了isEmpty()方法[检查对象是否为空).由于这个添加,我的Firebug控制台中出现“c.replace is not function”错误;我在网上的研究引导我进入jQuery bug tracker message,在那里我“学会”扩展Object.prototype不仅打破了jQuery,而且还是糟糕的编码实践.我的问题是,为什么?

最佳答案
ECMA-262第5版(和JavaScript 1.8.5)通过将属性的可枚举字段设置为false,可以通过Object.defineProperty和Object.defineProperties方法完成此操作.这在Chrome 5,Safari 5,Firefox 4和Internet Explorer 9或任何最近使用V8的服务器端实现(如Node.js)中都可用.

相关文章

1.第一步 设置响应头 header('Access-Control-Allow...
$.inArray()方法介绍 $.inArray()函数用于在数组中搜索指定的...
jquery.serializejson.min.js的妙用 关于这个jquery.seriali...
JS 将form表单数据快速转化为object对象(json对象) jaymou...
jQuery插件之jquery.spinner数字智能增减插件 参考地址:http...