Javascript 扩充Object.prototype会破坏Dojo
我遇到了一个问题,可能是一个bug,也可能只是预期的功能。我使用的是用Dojo构建的第三方脚本。在我自己的应用程序中,我使用(对于我的应用程序)方便的实用程序功能来扩充Function.prototype和Object.prototype。包含第三方脚本总是导致错误Javascript 扩充Object.prototype会破坏Dojo,javascript,dojo,prototype,Javascript,Dojo,Prototype,我遇到了一个问题,可能是一个bug,也可能只是预期的功能。我使用的是用Dojo构建的第三方脚本。在我自己的应用程序中,我使用(对于我的应用程序)方便的实用程序功能来扩充Function.prototype和Object.prototype。包含第三方脚本总是导致错误 Uncaught TypeError: Cannot set property _scopeName' of undefined Uncaught TypeError: Cannot read property 'toString'
Uncaught TypeError: Cannot set property _scopeName' of undefined
Uncaught TypeError: Cannot read property 'toString' of undefined
过了一会儿,我意识到这可能是因为我扩充了这些原型。函数原型似乎没有任何不良影响。但当我移除所有的Object.prototype方法后,它就停止抛出错误
简单的测试设置
<html lang="nl">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
Object.prototype.foo = function() {
console.log('bar');
}
</script>
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>
</body>
</html>
文件
Object.prototype.foo=函数(){
console.log('bar');
}
这是有意的吗?如果是这样,那么抓住这个错误并抛出一个更有意义的错误不是更好吗 您已将可枚举属性添加到
对象.prototype
,这意味着它将在中的所有对象上(通过继承)显示,以用于循环,例如:
//不要这样做(请参阅文本了解原因)
Object.prototype.foo=函数(){
控制台日志(“foo”);
};
//在物体上循环
var obj={
myOwnProperty:“酒吧”
};
for(obj中的var键){
log(“obj['”+key+']:“+obj[key]);
}
我无法忍受在for in循环中添加hasOwnProperty
。不会使用扩充对象的库。我站在overkill一边,就像避免使用new
@JuanMendes:只使用Object.keys(obj).forEach(…)
:-)(它只拥有可枚举属性)。这稍微好一点。还不足以改变我的想法:)然而,如果我写的是像Dojo这样的库,我肯定会添加这些检查