簡體   English   中英

如何在javascript中將方法添加到Math中

[英]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_bMath ,會提供完全不同的簽名,會發生什么?

  • 如果未來版本的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM