[英]How can I add the method to Math in javascript
我需要一個javascript的Math對象中的方法來計算任何基數的對數。 所以基本上我做的是這樣的:
Math.log_b=function(b,x){return Math.log(x)/Math.log(b);}
擴展內置函數的缺點是什么?
為了使我的情況更加清晰,我將獲取用戶輸入並將其替換為適當的Math對象函數名稱並將其傳遞給eval進行計算。 如果這不清楚,我的困境是,在我的情況下,我必須使用eval(即使它是邪惡的)並擴展Math對象函數最適合我的情況。
當我像這樣擴展內置函數時,是否存在一些奇怪的錯誤或其他錯誤的可能性,還是完全正常的事情?
你不應該修改你不擁有的東西。
如果您使用的其他插件或第三方代碼將自己的log_b
版本log_b
到Math
,會提供完全不同的簽名,會發生什么?
如果未來版本的JavaScript在Math
上定義了自己的log_b
版本,會log_b
什么?
有人會哭,因為有人不會做他們期望的事情。
我不確定為什么擴展Math
最適合你的情況 。
function my_log_b(b,x){return Math.log(x)/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`');
}
但它可能不是最好的想法,因為你可能會覆蓋瀏覽器代碼。
最好將此方法添加到您自己創建的對象中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.