Javascript 扩展Object.prototype的陷阱是什么?

Javascript 扩展Object.prototype的陷阱是什么?,javascript,object,prototype-programming,Javascript,Object,Prototype Programming,我想扩展Object.prototype,通过UI框架基本上支持JSON数据和html元素中的通知 Object.prototype.setValue = function(key,value){ // this simply sets value as this[key] = value // and raises an event Binder.setValue(this,key,value); }; Object.prototype.getValue = function

我想扩展Object.prototype,通过UI框架基本上支持JSON数据和html元素中的通知

Object.prototype.setValue = function(key,value){
   // this simply sets value as this[key] = value
   // and raises an event
   Binder.setValue(this,key,value);
};
Object.prototype.getValue = function(key){
   return Binder.getValue(this,key);
};
然而,基于这个问题和其他一些问题,人们说我们应该避免扩展Object.prototype,而不是任何其他类型

例如,如果我不这样做,我的代码就会变得更大

window.myModel.setValue("currentStatus","empty");
必须这样写

Binder.setValue(window.myModel,"currentStatus","empty");
我想知道如果我使用这些方法会出现什么问题?它是否会导致jQuery出现意外行为?我曾经看到,jQuery的ajax请求也会调用原型方法(因为它们引用了用于事件处理的函数)

这还有什么副作用?我知道它对(obj中的var x)是失败的,但大多数情况下我们可以使用obj.hasOwnProperty,这应该会有帮助吧

我知道(obj中的var x)的
会失败
,但大多数情况下我们可以使用
obj.hasOwnProperty
,这应该会有帮助吧

这是唯一的主要陷阱,
.hasOwnProperty()
有帮助,但只有在您自己的代码中。例如,在jQuery中,他们故意决定不在
$.each()
方法中调用
.hasOwnProperty


我在自己的代码中使用了
Object.defineProperty(…)
,以避开可枚举属性问题,而不会产生任何不良影响(尽管对
Array.prototype

您只是不想弄乱主机或本机对象的原型

  • 您无法知道它对任何第三方脚本有哪些副作用
  • 您可能会混淆第三方代码
  • 你不知道这些方法是否有一天是本机创建的

总体而言,扩展对象。原型影响整个站点上的任何其他对象。同样,您也不想这样做,除非您处于这样一个沙盒环境中,ecmascript的每一部分都是自己编写的,并且您100%确定没有加载任何第三方脚本。

为什么jQuery作者决定不调用.hasOwnProperty,有什么具体原因吗?它确实尝试调用我的事件处理程序并通知更改,但我确实通过检查参数找到了解决方法。