12.04.2020, 13:07
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
Сообщение от voraa
|
В первом правиле говорится про токен-нарушитель. Тоесть нечто такое, что делает синтаксическую конструкцию недопустимой.
Но конструкция }[ - вполне допустима
Array.prototype.sum = function (...arguments){returnthis.reduce(arguments);}[1,2,3]
Мы описали какую то функцию. Функция - это объект. К объекту применима операция [] для получения свойства по имени.
[1,2,3] - тут используется операция ',', которая дает значение последнего из выражений (3)
Т.е приведенный выше пример пытается взять значение свойства с именем '3' у объекта функции. Такого нет, поэтому undefined/
|
Спасибо большое! Офигеть, конечно. Никогда бы не подумал, что это работает именно так.
Почему все тогда почти никогда не ставят точки с запятой после декларации функций? Эта ситуация настолько редкая? Почти все пишут так:
function foo(){
return 3;
}
без точки с запятой после закрывающей фигурной скобки.
Последний раз редактировалось jaroslav.tavgen, 12.04.2020 в 13:13.
|
|
12.04.2020, 13:11
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
Сообщение от Nexus
|
jaroslav.tavgen, а что вы, собственно, сделать то пытаетесь?
На имплементацию метода «sum» это не похоже, на алиас базового метода «reduce» - тоже.
|
Алиас метода reduce.
Сообщение от Nexus
|
Хотите понять в чем у вас ошибка - дебажте, посмотрите, что у вас находится в переменной «arguments».
|
Дебагинг помочь не мог, т.к. до входа внутрь функции дело даже не доходило - сразу сообщение об ошибке про undefined.
Я так понял, что моей ошибкой было то, что вместо того, чтобы рассматривать переданный аргумент как функцию (function(args)) я рассматривал его как массив аргументов (function(...args))
Сообщение от Nexus
|
P.S. переопределять значение переменной «arguments» - не есть хорошо, лучше подберите своей переменной другое название, например «args»
|
Спасибо! Буду иметь в виду.
|
|
12.04.2020, 13:22
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
Сообщение от jaroslav.tavgen
|
я рассматривал его как массив аргументов (function(...args))
|
и правильно делали в данном случае ...
вопрос на засыпку, как используя только Array.prototype.sum и функцию сложения, получить сумму двух массивов?
|
|
12.04.2020, 13:23
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Сообщение от jaroslav.tavgen
|
Почему все тогда почти никогда не ставят точки с запятой после декларации функций? Эта ситуация настолько редкая?
|
Редкой бывает ситуация, когда оператор начинается с [ или с (
Например
let a= x + y
(a <4 || 8< a)? x+=10 : x-=10
В этом случае будет попытка вызвать функцию y(a <4 || 8< a)
или
let f = function () {...}
(a <4 || 8< a)? x+=10 : x-=10
То же - определили функцию и сразу пытаемся ее вызвать
|
|
12.04.2020, 13:23
|
|
Профессор
|
|
Регистрация: 08.11.2017
Сообщений: 642
|
|
зачем здесь деструктор?
Array.prototype.sum = function (...arguments)
еще пример:
return true
и
return
true
|
|
12.04.2020, 13:29
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
jaroslav.tavgen,
как используя только Array.prototype.sum и функцию сложения, получить сумму двух массивов?
const fn = (a,b)=>a+b;
const a = [1,2,3];
const b = [4,5,6];
Array.prototype.sum = function(...args){ return this.reduce/* ... */};
console.log( /* ... */)//21
Последний раз редактировалось рони, 12.04.2020 в 13:33.
|
|
12.04.2020, 13:29
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Сообщение от рони
|
вопрос на засыпку, как используя только Array.prototype.sum и функцию сложения, получить сумму двух массивов?
|
А функция сложения это что?
|
|
12.04.2020, 13:37
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
Сообщение от voraa
|
А функция сложения это что?
|
fn = (a,b)=>a+b;
и наверно задание скорее для начинающих.
|
|
12.04.2020, 13:43
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
Сообщение от рони
|
jaroslav.tavgen,
как используя только Array.prototype.sum и функцию сложения, получить сумму двух массивов?
const fn = (a,b)=>a+b;
const a = [1,2,3];
const b = [4,5,6];
Array.prototype.sum = function(...args){ return this.reduce/* ... */};
console.log( /* ... */)//21
|
const a = [1,2,3];
const b = [4,5,6];
Array.prototype.sum = function(arg){ return [...this, ...arg].reduce((acc,val)=>acc+val, 0)};
console.log(a.sum(b));
если я правильно понял задачу, конечно...
|
|
12.04.2020, 13:46
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
Сообщение от jaroslav.tavgen
|
если я правильно понял задачу
|
направление правильное, но куда делись строки 1 и 4 из задания?
|
|
|
|