Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 扩充Object.prototype会破坏Dojo_Javascript_Dojo_Prototype - Fatal编程技术网

Javascript 扩充Object.prototype会破坏Dojo

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'

我遇到了一个问题,可能是一个bug,也可能只是预期的功能。我使用的是用Dojo构建的第三方脚本。在我自己的应用程序中,我使用(对于我的应用程序)方便的实用程序功能来扩充Function.prototype和Object.prototype。包含第三方脚本总是导致错误

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这样的库,我肯定会添加这些检查