增加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?