07.04.2020, 21:27
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
Вообще ничего не понял в этом коде...
Array.prototype.sum = function (...arguments){
return this.reduce(arguments);
}
[1,2,3].sum((a,b)=>a+b);
Результат: TypeError: Cannot read property 'sum' of undefined с указанием на последнюю строчку.
Я, честно говоря, вообще не понял, что произошло Как так получилось, что массив стал считаться undefined?
Последний раз редактировалось jaroslav.tavgen, 07.04.2020 в 21:37.
|
|
08.04.2020, 07:03
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Поизучайте автовставку ';'
Array.prototype.sum = function (...arguments){
return this.reduce(arguments);
};
[1,2,3].sum((a,b)=>a+b);
|
|
08.04.2020, 09:34
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
voraa,
чего то в супе коде не хватает.
|
|
08.04.2020, 09:40
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Сообщение от рони
|
voraa,
чего то в супе коде не хватает.
|
Я отвечаю на вопрос почему массив - undefined.
А с кодами (reduce, ...) - лучше человек сам поучится разбираться.
|
|
08.04.2020, 09:55
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
voraa,
почему бы не довести код, до рабочего состояния в целом?
|
|
08.04.2020, 10:01
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Сообщение от рони
|
voraa,
почему бы не довести код, до рабочего состояния в целом?
|
Array.prototype.sum = function (arguments){
return this.reduce(arguments);
};
alert([1,2,3].sum((a,b)=>a+b));
Можно и код написать, когда делать нечего.
Но люди сюда приходят с конкретными вопросами.
Если я просто в коде уберу эти гребанные три точки, то этого мало.
Человек должен понять, что они обозначают, когда использовать их, а когда нет.
Если человек учится программировать, то это подразумевает, что он сам что то читает из документации, сам пробует, сам исправляет ошибки.
Ну бывает, упрешься в какую нибудь ерунду (лишнюю запятую, не поставленный ; ) и тупо смотришь, не видя этой мелочи.
Можно подсказать, какой API использовать...
Но писать коды, решая задачки для студентов....
Последний раз редактировалось voraa, 08.04.2020 в 10:08.
|
|
08.04.2020, 10:12
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
Сообщение от voraa
|
Если я просто в коде уберу эти гребанные три точки, то этого мало.
|
ок, подождём пока код исправит автор темы.
|
|
12.04.2020, 11:55
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
Сообщение от voraa
|
Поизучайте автовставку ';'
Array.prototype.sum = function (...arguments){
return this.reduce(arguments);
};
[1,2,3].sum((a,b)=>a+b);
|
Офигеть. То есть, если добавить точку с запятой, то этого аномального undefined нет.
А как это работает? Я прочитал про автоставку точки с запятой https://codeburst.io/ecmascript-auto...n-50f09091e377 , но до сих пор не понял, что меняет наличие или отсутствие точки с запятой после закрывающей скобки }
UPD: начинаю понимать. Дело в том. что [1,2,3]... идёт сразу после закрывающей фигурной скобки. Если в консоле Chrome в начале отдельно выполнить Array.prototype..., а потом отдельно [1,2,3]... , то undefined нет. В общих чертах начал понимать, но до конца пока неясно.
Последний раз редактировалось jaroslav.tavgen, 12.04.2020 в 12:06.
|
|
12.04.2020, 12:32
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
В первом правиле говорится про токен-нарушитель. Тоесть нечто такое, что делает синтаксическую конструкцию недопустимой.
Но конструкция }[ - вполне допустима
Array.prototype.sum = function (...arguments){returnthis.reduce(arguments);}[1,2,3]
Мы описали какую то функцию. Функция - это объект. К объекту применима операция [] для получения свойства по имени.
[1,2,3] - тут используется операция ',', которая дает значение последнего из выражений (3)
Т.е приведенный выше пример пытается взять значение свойства с именем '3' у объекта функции. Такого нет, поэтому undefined/
|
|
12.04.2020, 12:39
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
jaroslav.tavgen, а что вы, собственно, сделать то пытаетесь?
На имплементацию метода «sum» это не похоже, на алиас базового метода «reduce» - тоже.
Хотите понять в чем у вас ошибка - дебажте, посмотрите, что у вас находится в переменной «arguments».
P.S. переопределять значение переменной «arguments» - не есть хорошо, лучше подберите своей переменной другое название, например «args»
|
|
|
|