Создать массив объектов с действиями функций - PullRequest
0 голосов
/ 10 июля 2020

Можно ли создать массив объектов, выполняющих функцию? Например, вот так:

<script>
console.clear();

const acts = [
  { 'inc' : (x) => x+1 },
  { 'dec' : (x) => x-1 } 
];

console.log(acts.inc(10));
console.log(acts.dec(15));

</script>

Вышеуказанное дает ошибку - TypeError: plays.in c не является функцией.

Ответы [ 3 ]

2 голосов
/ 10 июля 2020

Вы почти у цели! Создайте объект со «свойствами функции» вместо массива объектов:

acts = {
  'inc' : (x) => x+1,
  'dec' : (x) => x-1
};

Затем

acts.inc(3)

вернет:

4

В исходном код, вам нужно будет использовать:

acts[0].inc(3)

, потому что это массив ...

0 голосов
/ 10 июля 2020

Для всех, кому интересно, вот как я использовал выбранное решение вместе с примером вывода для каждой созданной функции (с некоторыми параметрами).

console.clear (); // следующее используется только для тестирования отображения экрана var previous = console.log; // сохраняем прежние действия console.log var demo = document.getElementById ('demo'); console.log = функция (... сообщение) {прежнее (... сообщение); // поддерживает существующее ведение журнала через консоль. (необязательно) demo.append (msg.join ('') + '\ n'); // вывод должен быть указан} // конец тестирования дисплея (также отображается на дисплее console.log) const act = {'in c': (x) => x + 1, 'de c': (x) => x-1, 'mul': (x, y) => x * y, 'div': (x, y) => x / y, // осторожно с y = 0 (здесь никаких проверок ) 'pwr': (x, y) => x ** y, // x в степени y 'deg': (rad) => (rad * Math.PI / 360), // градусы от радиан 'rad ': (deg) => (deg / Math.PI * 360), // радианы от градусов' pct ': (amt) => amt * 100, // формируем процентный' бит ': (siz) => (действует .pwr (2, siz) -1) .toString (2), // формируем битовую маску 'oct': (de c) => de c .toString (8), // формируем восьмеричное 'шестнадцатеричное ': (de c) => de c .toString (16), // формируем шестнадцатеричное' fmt ': (amt, size) => amt.toFixed (size), // число .toFixed (#) string 'cdt': (dateInfo, locn = 'en-US') => dateInfo.toLocaleDateString (locn), // форматировать объект даты в США}; console.log (действует в c (10)); // 11 console.log (plays.de c (15)); // 14 console.log (plays.mul (4,5)); // 20 console.log (plays.div (5,4)); // 1.25 console.log (plays.pwr (2,16)); // 65536 console.log (plays.deg (360)); // 3.14159 ... console.log (plays.rad (Math.PI / 2)); // 1.57079 ... console.log (`$ {act.pct (0.15)}%`); // 15% console.log (`$ {act.pct (plays.div (7,8))}%`); // 87,5% console.log ('0b' + plays.bit (8)); // 0b11111111 console.log ('10 .0 = 0o '+ actions.oct (10),' octal '); // 0o12 console.log ('0x' + plays.hex (65535)); // 0xffff console.log (plays.fmt (Math.PI, 2)); // 3.14 console.log (plays.fmt (Math.PI, 4)); // 3.1416 console.log (Math.PI); // полная точность PI console.log ('m / d / yyyy:', plays.cdt (new Date ())); // текущая дата (формат м / д / год) US console.log ('дд / мм / гггг:', plays.cdt (new Date (), 'en-GB')); // дата (формат дд / мм / год) ГБ // тесты двоичного диапазона отображает console.log ('\ n', '---- +'. repeat (6) + '-'); console.log ('0b' + actions.bit (0)); // 0b0 console.log ('0b' + plays.bit (0) .padStart (8, '0')); // 0b00000000 console.log ('0b' + plays.bit (16)); // 0b1111 ... 1111 (длина = 16 бит) console.log ('0b' + plays.bit (16) .padStart (32, '0')); // 0b0111 ... 1111 console.log ('0b0' + plays.bit (31)); // 0b11111 ... 11111 (длина = 31 бит) console.log ('0b' + plays.bit (32) .padStart (32, '0')); // 0b1111 ... 1111 (= 32 бита) console.log ('\ n', '---- +'. Repeat (6) + '-'); console.log (`День рождения папы: $ {actions.cdt (new Date (1925,1,1))}`); // формат США по умолчанию

Дополнительные комментарии приветствуются.

0 голосов
/ 10 июля 2020

Вы можете добавить функцию к прототипу массива.

Array.prototype.inc = <function>

...