Javascript 每个对象都应该有一个方法';addEventListener';?

Javascript 每个对象都应该有一个方法';addEventListener';?,javascript,oop,Javascript,Oop,我需要一个函数来生成m和n之间的伪随机整数,所以我想,“我知道,我将用randrange方法扩展数学,类似于Python的方法” 这似乎是可行的,但当我将其放入集成代码中时,我遇到了多个错误消息问题,如“[该函数]没有“addEventListener”方法” 我的问题的要点是:我在这里扩展数学的方式是否存在根本性的问题?该函数应该有这样的方法吗?如果没有,为什么jwplayer会要求它呢 我在下面附上了更多的细节,但是如果你已经厌倦了,想开始假设答案,你可以跳过剩下的 当我去测试集成代码时,

我需要一个函数来生成m和n之间的伪随机整数,所以我想,“我知道,我将用
randrange
方法扩展数学,类似于Python的方法”

这似乎是可行的,但当我将其放入集成代码中时,我遇到了多个错误消息问题,如“[该函数]没有“addEventListener”方法”

我的问题的要点是:我在这里扩展
数学
的方式是否存在根本性的问题?该函数应该有这样的方法吗?如果没有,为什么jwplayer会要求它呢

我在下面附上了更多的细节,但是如果你已经厌倦了,想开始假设答案,你可以跳过剩下的


当我去测试集成代码时,我看到了以下错误:

jwplayer.js:1 Uncaught TypeError: Object function rand(min, max) {
        return min + Math.floor(Math.random() * (max + 1 - min));
    } has no method 'addEventListener'
jwplayer.js:1 a.plugins.pluginloader.load
jwplayer.js:1 a.embed
jwplayer.js:1 b.api.setup
script.js:155 (anonymous function)
jquery-1.6.4.js:660 jQuery.extend.each
jquery-1.6.4.js:274 jQuery.fn.jQuery.each
script.js:150 jQuery.click.window.Modernizr.input.required
jquery-1.6.4.js:1016 jQuery.extend._Deferred.deferred.resolveWith
jquery-1.6.4.js:437 jQuery.extend.ready
jquery-1.6.4.js:923 DOMContentLoaded
下面是上面提到的script.js中的一个片段:

// Setup the video player:
$("video").each(function (i, e) {
    // Switching out ids like this is a horrible hack,
    // but apparently it's the only way jwplayer will load.
    var oldId = $(e).attr('id');
    $(e).attr("id", "tmpVideoSetup");
    jwplayer("tmpVideoSetup").setup({
        flashplayer: window.CDN + "/js/libs/mediaplayer-5.7-licensed/player.swf",
        levels: [
            // TODO: set this up to dynamically choose the videos to play.
            { file: window.CDN + "/videos/LK_About.mp4" },
            { file: window.CDN + "/videos/LK_About.wmv" }
        ]
    });
    $(e).attr("id", oldId);
});

当我删除视频加载代码时,其他一切都会按预期运行。

为什么要将其附加到
数学中?如果你想,那么
Math.rand=…
有什么问题吗

Math
对象不应该以原型的方式进行扩展,因为它是“静态”类型。您不能实例化它(即使用
new
调用它)。这是一个例外情况。所有其他类型均为“非静态”。尽管这并不奇怪,
Math
只是静态方法的集合。不需要任何实例化

Math.constructor===Object
(至少在chrome中是这样),因此您实际上是在扩展每个对象的原型,而另一个库可能正在枚举所有对象属性。例如:

Math.constructor.prototype.prop = 42;
k = {};
k.prop; // 42

我知道这并不能回答你的问题,但人们通常不赞成在JavaScript中修改本机对象。你最好为你创建的实用方法创建自己的库。如果我这样做了,我就不会从@davin那里学到有趣的东西。这可以解释,如果我扩展了每个对象。@kojiro,好的,请提交更改并让我们知道:)我实际上在发布问题并将其更改为Math.rand后立即面相。这解决了问题,但我仍然不明白为什么。现在我知道了。谢谢
Math.constructor.prototype.prop = 42;
k = {};
k.prop; // 42