当前位置:  开发笔记 > 编程语言 > 正文

在javascript和Math对象中扩展Number.prototype?

如何解决《在javascript和Math对象中扩展Number.prototype?》经验,为你挑选了3个好方法。

我一直想知道为什么Javascript具有全局Math对象而不是给出数字自己的方法.它有充分的理由吗?

做这样的事情也有任何缺点(效率除外)吗?:

Number.prototype.round = function(){
    return Math.round(this);
};

为了说清楚,我理解像π这样的常量需要某个地方和函数应用于多个数字,如min/max.问题主要涉及只影响单个数字的方法,如圆形,abs,sin,pow等.



1> Ferdinand Be..:

Number.prototype除了让其他人感到困惑之外,延伸没有任何缺点.重点是什么?什么是更好的使用value.round(),而不是Math.round(value)

Math对象有几个很好的理由:

    它适用于非数字,太:Math.round("5")工作,而value.round()当值是一个字符串将无法正常工作(例如,一个文本框的值)

    Math对象的某些成员不属于"主"数字值,如Math.min()Math.max().或者你想用它a.max(b)吗?

    其他成员是全球性的,不属于专门的数字.例子是常数Math.PI或函数Math.random().



2> Borgar..:

Math对象的原因很简单:"因为Java做到了".不是最好的理由,但我们在这里.我认为在道格拉斯·克罗克福德开始他的竞选活动以抑制一半语言*之前,事情变得更有意义了.最初你被"允许"或意味着做这样的事情:

with (Math) {
  var n = min( round(a) * round(b), sqrt(c) );
  var result = exp( n + d );
}

扩展的缺点Number.prototype是其他人可能会做同样的事情.或者更糟糕的是,例如,定义Number.prototype.round对称的舍入函数.

如果您正在寻找让生活更轻松的方法,为什么要停在那里?为什么不简单地将Math函数包含为全局函数?

var m = 'abs acos asin atan atan2 ceil cos exp floor log max min ' +
        'pow random round sin sqrt tan PI').split(' ');
for (var i=0,l=m.length; i

这会将所有数学函数放入全局范围,从而有效地允许您停止输入"Math".问问自己:扩展Number和扩展window这些功能有什么真正的区别吗?

*在你激怒我之前:克罗克福德的评论并不意味着太过认真.我确实同意他with在一个隐含的全球环境中非常危险.



3> 小智..:

试着做 123.round();

你的javascript控制台会给你的眼睛抛出几百个错误:P,不......

你可以做:

Number.prototype.x然后:(123).x();但永远不会123.x();


简单:123..round()
是的,`123..round()`或`(123).round()`都可以.`123..round()=== 123.0.round()`
我一直想知道为什么你不能做123.method().我知道因为浮点数而不允许它更容易,但我认为ruby允许语法,它会让一切变得更容易!
推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有