Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中将该方法添加到Math中_Javascript - Fatal编程技术网

如何在javascript中将该方法添加到Math中

如何在javascript中将该方法添加到Math中,javascript,Javascript,我需要javascript的Math对象中的一个方法,该方法计算任意基数的对数。所以我基本上是这样做的: Math.log_b=function(b,x){return Math.log(x)/Math.log(b);} 像这样扩展内置函数的缺点是什么 为了更清楚地说明我的情况,我采用了用户输入,并将其替换为适当的数学对象函数名,然后将其传递给eval进行计算。如果这还不清楚,我的困境是,在我的例子中,我必须使用eval(即使它是邪恶的),扩展数学对象函数最适合我的情况 当我像这样扩展内置函数

我需要javascript的Math对象中的一个方法,该方法计算任意基数的对数。所以我基本上是这样做的:

Math.log_b=function(b,x){return Math.log(x)/Math.log(b);}
像这样扩展内置函数的缺点是什么

为了更清楚地说明我的情况,我采用了用户输入,并将其替换为适当的数学对象函数名,然后将其传递给eval进行计算。如果这还不清楚,我的困境是,在我的例子中,我必须使用eval(即使它是邪恶的),扩展数学对象函数最适合我的情况


当我像这样扩展内置函数时,是否有可能出现一些奇怪的bug或其他问题,或者这是完全正常的做法?

您不应该修改您不拥有的东西

  • 如果您使用的另一个插件或第三方代码将其自己版本的
    log\b
    添加到
    Math
    ,从而提供完全不同的签名,会发生什么情况

  • 如果未来的JavaScript版本在
    Math
    上定义了自己的
    log\b
    版本,会发生什么

有人会哭,因为对某人来说,它不会做他们期望的事情


我不确定为什么扩展
数学
最适合您的情况

。。。似乎仍然适合你的情况。更好的是,定义自己的名称空间,并将其放在其中

var ME = {};

ME.log_b = function (b,x){return Math.log(x)/Math.log(b);}
您可以为其制作原型:

if (Math.__proto__) {
    Math.__proto__.log_b=function(b,x){ return this.log(x) / this.log(b); }
}
else {
    alert('Cannot prototype `Math`');
}
但这可能不是最好的主意,因为您可能会覆盖浏览器代码


最好将此方法添加到您自己创建的对象中。

没有Math()构造函数,因此您无法对其进行原型化。数学函数只是函数,而不是对象的方法。是的,它不能进行原型化。@Jack\u of_All\u Trades是的,它可以进行原型化。看看我的答案。我不确定这是如何回答这个问题的?他已经在
数学中添加了自己的方法(这很有效),他在问这是否可以,不可以?你是对的;你的IE不支持非标准的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,正如他的意愿:P.@Matt baah:-P这在糟糕的浏览器中可能是正确的:-PMeh,我会删除我的否决票,但你真的不需要首先进行原型化
Math
是一个活生生的呼吸对象,您可以(普遍)直接向其添加方法。
if (Math.__proto__) {
    Math.__proto__.log_b=function(b,x){ return this.log(x) / this.log(b); }
}
else {
    alert('Cannot prototype `Math`');
}