javascript - 通过原型(prototype)扩展数学对象不起作用

标签 javascript math prototype built-in

我尝试扩展 JavaScript Math .但有一件事让我感到惊讶。

当我试图通过 prototype 扩展它时

Math.prototype.randomBetween = function (a, b) {
    return Math.floor(Math.random() * (b - a + 1) + a);
};

在控制台中我有错误'无法设置未定义的属性'randomBetween'......

但如果我将此功能分配给 Math.__proto__
Math.__proto__.randomBetween = function (a, b) {
    return Math.floor(Math.random() * (b - a + 1) + a);
};

然后一切正常。

谁能解释我为什么它以这种方式工作?我很感激任何帮助。

最佳答案

Math不是构造函数,所以它没有 prototype属性(property):

new Math(); // TypeError: Math is not a constructor

相反,只需将您的方法添加到 Math本身作为 own property :
Math.randomBetween = function (a, b) {
    return Math.floor(Math.random() * (b - a + 1) + a);
};

您使用 __proto__ 的方法之所以有效,是因为,因为 MathObject例如,Math.__proto__Object.prototype .

但请注意,您正在添加 randomBetween方法适用于所有对象,不仅适用于 Math .这可能是有问题的,例如在使用 for...in 迭代对象时。环形。

关于javascript - 通过原型(prototype)扩展数学对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27580890/

相关文章:

javascript - 如何使用javascript查找二维数组的中心元素的索引?

javascript - ReactJS:如何更改 Material UI 中步进器标签的字体大小和 marginTop?

javascript - 类型 'pseudoStyle' 上不存在属性 'HTMLElement'

javascript - 如何将原型(prototype)模式引入javascript命名空间

javascript - Javascript什么时候可以开始调用Actionscript?

javascript - 是否可以向 Parse Cloud Code 添加类?

algorithm - 任务分配算法

math - 在给定范围内均匀分布 X 值

algorithm - 给定一个自然数 A,我想找到所有自然数对 (B,C) 以便 B*C*(C+1) = A

c++ - Ubuntu 和 OS-X 之间的头文件兼容性