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