Причина использования объекта 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<l; i++) {
window[ m[i] ] = Math[ m[i] ];
}
Это переведет все математические функции в глобальную область, эффективно позволяя вам прекратить вводить «Математика». Задайте себе вопрос: есть ли реальная разница между расширением Number
и расширением window
с помощью этих функций?
* Прежде, чем вы меня разозлите: комментарий Крокфорда не должен восприниматься слишком серьезно. Я согласен с ним, что with
очень опасен в неявной глобальной среде.