Ann*_*nan 29 javascript oop methods prototype
我一直想知道为什么Javascript具有全局Math对象而不是给出数字自己的方法.它有充分的理由吗?
做这样的事情也有任何缺点(效率除外)吗?:
Number.prototype.round = function(){
return Math.round(this);
};
Run Code Online (Sandbox Code Playgroud)
为了说清楚,我理解像π这样的常量需要某个地方和函数应用于多个数字,如min/max.问题主要涉及只影响单个数字的方法,如圆形,abs,sin,pow等.
Fer*_*yer 20
Number.prototype除了让其他人感到困惑之外,延伸没有任何缺点.重点是什么?什么是更好的使用value.round(),而不是Math.round(value)?
该Math对象有几个很好的理由:
Math.round("5")工作,而value.round()当值是一个字符串将无法正常工作(例如,一个文本框的值)Math.min()或Math.max().或者你想用它a.max(b)吗?Math.PI或函数Math.random().Bor*_*gar 19
Math对象的原因很简单:"因为Java做到了".不是最好的理由,但我们在这里.我认为在道格拉斯·克罗克福德开始他的竞选活动以抑制一半语言*之前,事情变得更有意义了.最初你被"允许"或意味着做这样的事情:
with (Math) {
var n = min( round(a) * round(b), sqrt(c) );
var result = exp( n + d );
}
Run Code Online (Sandbox Code Playgroud)
扩展的缺点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<l; i++) {
window[ m[i] ] = Math[ m[i] ];
}
Run Code Online (Sandbox Code Playgroud)
这会将所有数学函数放入全局范围,从而有效地允许您停止输入"Math".问问自己:扩展Number和扩展window这些功能有什么真正的区别吗?
*在你激怒我之前:克罗克福德的评论并不意味着太过认真.我确实同意他with在一个隐含的全球环境中非常危险.
小智 15
试着做 123.round();
你的javascript控制台会给你的眼睛抛出几百个错误:P,不......
你可以做:
Number.prototype.x然后:(123).x();但永远不会123.x();
| 归档时间: |
|
| 查看次数: |
17507 次 |
| 最近记录: |