Расширение Number.prototype в JavaScript и Математическом объекте?

Статически типизированные языки программирования проверяют тип (процесс проверки и принудительного применения ограничений типов) во время компиляции, а не во время выполнения.

Динамически типизированные языки программирования проверяют тип при запуске - времени, в отличие от времени компиляции.

29
задан Annan 8 March 2009 в 01:28
поделиться

3 ответа

Причина эти Math объект проста: "потому что Java делает это". Не лучшая из причин, но мы здесь Я предполагаю, что вещи имели больше смысла тогда, прежде чем Douglas Crockford запустил свою кампанию для подавления половины language*. Первоначально Вам "разрешили" или предназначили, чтобы сделать вещи как это:

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 с этими функциями?

*, Прежде чем Вы будете гореть меня: комментарий Crockford не предназначен, чтобы быть отнесенным слишком серьезно. Я действительно соглашаюсь с ним, что with очень опасно в неявной глобальной среде.

19
ответ дан Joshua Pinter 14 October 2019 в 08:00
поделиться

Нет никакого недостатка в расширении Number.prototype кроме смущения других людей. Какой смысл? Что лучше в использовании value.round() вместо Math.round(value)?

существует несколько серьезных оснований для эти Math объект:

  1. Это работает на нечисла, также: Math.round("5") работы, тогда как value.round() не будет работать, когда значение является строкой (например, значение текстового поля)
  2. , Некоторые члены Математического объекта не принадлежат "основному" числовому значению, как Math.min() или Math.max(). Или Вы хотите использовать его как a.max(b)?
  3. Другие участники глобальны и не принадлежат специализированному числу. Примерами являются константы как Math.PI или функция Math.random().
20
ответ дан JacobIRR 14 October 2019 в 08:00
поделиться

Я думаю, что Математика является больше, чем набор методов Числа. Это - использование шире. Скажите, с помощью NumberVariable. PI может сбивать с толку. То же с генерацией случайных чисел.

Также я думаю, расширяя число, в порядке, потому что это - часть природы JS. Возможно, кто-то исправит меня, если я буду неправ здесь.

1
ответ дан Sergii 14 October 2019 в 08:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: