1

祝大家天天好

有没有一种方法可以增加 javascript Object 和 Function 元素以避免冲突问题?让我更具体一点:

假设我有 2 个 .js 文件:

ex1.js 有 Object.prototype.aMethod=function(){/*a function*/}

ex2.js 有 Object.prototype.aMethod=function(){/*another function*/}

在这种情况下, ex1.js 扩充被 ex2.js 上的扩充覆盖。

我的问题 :

有没有办法将扩充的效果限制在他的文件上下文中,或者更好地限制在模块上下文中?

编辑:

实际上,我正在阅读 crockford 的书 JavaScript:好的部分,其中他使用 Object 和 Function 的原型增强作为正常的操作,而没有谈论冲突问题。这很奇怪,因为这本书倾向于不污染全局命名空间。所以我认为必须有某种解决方法。

4

1 回答 1

2

如果您正在修改的对象是全局的,则原型修改是全局的。为了支持您尝试做的事情,您可以使用模块本地原型:

var MyObject = function(properties) {
  var key;
  for(key in properties) {
    if(properties.hasOwnProperty(key)) {
      this[key] = properties[key];
    }
  }
};

MyObject.prototype.aMethod = function() {
  console.log(this.name);
}

var obj = new MyObject({name: "blah"});
obj.aMethod();

// Prints "blah"

在 javascript 上,修改Object.prototype通常被认为是“邪恶的”,因为继承的属性会出现在for-in之后的每个循环中。请注意,修改Object.prototype不同于修改Object对象,这是Sugar.JS等库通常所做的。

于 2013-02-03T13:45:25.930 回答