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