增加Object.prototype打破了Dojo
我遇到了一个可能是bug的问题,或者它可能只是预期的功能。 我正在使用由Dojo构建的第三方脚本。 在我自己的应用程序中,我增加了Function.prototype和Object.prototype(对于我的应用程序)方便的实用函数。 包括第三方脚本总是导致错误。
Uncaught TypeError: Cannot set property _scopeName' of undefined
Uncaught TypeError: Cannot read property 'toString' of undefined
过了一段时间,我意识到这可能在于我增强了这些原型。 Function.prototypes似乎没有不良影响。 但是一旦我删除了所有的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
,这意味着它将显示在所有对象 (通过继承)中的for-in
循环等等:
// DON'T DO THIS (see text for why)
Object.prototype.foo = function() {
console.log("foo");
};
// Looping over an object
var obj = {
myOwnProperty: "bar"
};
for (var key in obj) {
snippet.log("obj['" + key + "']: " + obj[key]);
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
链接地址: http://www.djcxy.com/p/27245.html
上一篇: Augmenting Object.prototype breaks Dojo
下一篇: Is there a way to give all Objects a method without modifying Object.prototype?