|
Вообще ничего не понял в этом коде...
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?:) |
Поизучайте автовставку ';'
Array.prototype.sum = function (...arguments){ return this.reduce(arguments); }; [1,2,3].sum((a,b)=>a+b); |
voraa,
чего то в |
Цитата:
А с кодами (reduce, ...) - лучше человек сам поучится разбираться. |
voraa,
почему бы не довести код, до рабочего состояния в целом? |
Цитата:
Array.prototype.sum = function (arguments){ return this.reduce(arguments); }; alert([1,2,3].sum((a,b)=>a+b)); Можно и код написать, когда делать нечего. Но люди сюда приходят с конкретными вопросами. Если я просто в коде уберу эти гребанные три точки, то этого мало. Человек должен понять, что они обозначают, когда использовать их, а когда нет. Если человек учится программировать, то это подразумевает, что он сам что то читает из документации, сам пробует, сам исправляет ошибки. Ну бывает, упрешься в какую нибудь ерунду (лишнюю запятую, не поставленный ; ) и тупо смотришь, не видя этой мелочи. Можно подсказать, какой API использовать... Но писать коды, решая задачки для студентов.... |
Цитата:
|
Цитата:
А как это работает? Я прочитал про автоставку точки с запятой https://codeburst.io/ecmascript-auto...n-50f09091e377 , но до сих пор не понял, что меняет наличие или отсутствие точки с запятой после закрывающей скобки } UPD: начинаю понимать. Дело в том. что [1,2,3]... идёт сразу после закрывающей фигурной скобки. Если в консоле Chrome в начале отдельно выполнить Array.prototype..., а потом отдельно [1,2,3]... , то undefined нет. В общих чертах начал понимать, но до конца пока неясно. |
В первом правиле говорится про токен-нарушитель. Тоесть нечто такое, что делает синтаксическую конструкцию недопустимой.
Но конструкция }[ - вполне допустима Array.prototype.sum = function (...arguments){returnthis.reduce(arguments);}[1,2,3] Мы описали какую то функцию. Функция - это объект. К объекту применима операция [] для получения свойства по имени. [1,2,3] - тут используется операция ',', которая дает значение последнего из выражений (3) Т.е приведенный выше пример пытается взять значение свойства с именем '3' у объекта функции. Такого нет, поэтому undefined/ |
jaroslav.tavgen, а что вы, собственно, сделать то пытаетесь?
На имплементацию метода «sum» это не похоже, на алиас базового метода «reduce» - тоже. Хотите понять в чем у вас ошибка - дебажте, посмотрите, что у вас находится в переменной «arguments». P.S. переопределять значение переменной «arguments» - не есть хорошо, лучше подберите своей переменной другое название, например «args» |
Часовой пояс GMT +3, время: 09:57. |
|