8

我必须在这里遗漏一些东西,因为对我来说Math.prototype未定义的。为什么是这样?我试图做这样的事情:

Math.prototype.randomRange = function(from, to){
    return Math.floor(Math.random() * (to - from + 1) + from);
}

但不得不做这样的事情:

Math.randomRange = function(from, to){
    return Math.floor(Math.random() * (to - from + 1) + from);
}

不过,这感觉不对。只是我还是我应该以另一种方式这样做?如果这是一个愚蠢或重复的问题,我深表歉意,但我无法通过搜索找到任何东西(当我搜索“Math.prototype”时恰好出现了两个问题,这有点奇怪)。

4

3 回答 3

6

这些Math函数类似于其他 OO 语言中的类级函数。构造函数上没有原型对象;无论如何,没有人(我知道)使用构造函数。(你会对Math实例做什么?)

编辑——它在评论中被指出(我从来没有想过要检查我猜)这Math不是一个函数。在浏览器控制台中输入Math(),您将收到错误消息。

于 2012-05-30T16:42:19.800 回答
2

MathJavaScript 中的静态类相当于其他语言中的静态类。它没有原型或构造函数(相当于,比如说,用 Java 编写一个包含所有静态方法和只有一个私有构造函数的类)。

有关更多信息,请参阅 StackOverflow 问题:在 JavaScript/ActionScript 中重新定义 Math.constructor 是否有实际用途?

具体来说,接受的答案:https ://stackoverflow.com/a/10431309/1403635

于 2012-05-30T16:44:36.540 回答
1

因为 Math 是一个静态对象,而不是构造函数。如果你调用它会抛出一个错误new Math()

于 2012-05-30T16:43:31.533 回答