每个人都过得愉快,
有没有一种方法可以增加javascript对象和函数元素来避免冲突问题?让我更具体一点:
假设我有2个.js文件:
ex1.js有Object.prototype.aMethod=function(){/*a function*/}
ex2.js有Object.prototype.aMethod=function(){/*another function*/}
在这种情况下,ex1.js扩充会被ex2.js上的扩充覆盖。
我的问题:
有没有办法将扩充的影响限制在他的文件上下文中,或更好地限制到模块上下文?
编辑:
实际上,我正在阅读crockford的书JavaScript:好的部分,他使用对象和函数的原型扩充作为正常的事情,而不谈论冲突问题。这很奇怪,因为这本书倾向于不污染全局命名空间。所以我认为必须有某种解决方法。
答案 0 :(得分: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"
修改Object.prototype
通常被认为是javascript上的“邪恶”,因为继承的属性会在之后的每个for-in
循环中显示。请注意,修改Object.prototype
与修改Object
对象不同,后者通常是Sugar.JS等库。