我尝试扩展 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__
的方法之所以有效,是因为,因为 Math
是 Object
例如,Math.__proto__
是 Object.prototype
.但请注意,您正在添加
randomBetween
方法适用于所有对象,不仅适用于 Math
.这可能是有问题的,例如在使用 for...in
迭代对象时。环形。
关于javascript - 通过原型(prototype)扩展数学对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27580890/