#javascript #arrays #function
#javascript #массивы #функция
Вопрос:
Я определил прототип функции Array, но он выдает мне ошибку, когда я его вызываю.
Array.prototype.bublleSort = function() {
console.log(this)
}
[1, 23, 4].bublleSort()
Консоль показывает «Неперехваченный TypeError: не удается прочитать свойство ‘bublleSort’ из undefined». Это где-то неправильно?
Комментарии:
1. Добавьте точку с запятой после определения функции.
2. Отсутствует точка с запятой (;) после функции.
Ответ №1:
Вы забыли точку с запятой, поэтому интерпретатор видит ваш код как:
Array.prototype.bublleSort = function() {
console.log(this)
}[1, 23, 4].bublleSort()
В нем используется оператор запятой внутри скобок, но функции не имеют такого свойства, как 4
:
Array.prototype.bublleSort = function() {
console.log(this)
}[4].bublleSort()
упрощает до
<someFunction>[4].bublleSort()
Но функции не имеют 4
свойства.
Всегда ставьте точки с запятой в конце инструкций — нехорошо полагаться на автоматическую вставку точки с запятой, это слишком легко забыть и столкнуться с ошибками.
Array.prototype.bublleSort = function() {
console.log(this)
};
[1, 23, 4].bublleSort()
Ответ №2:
Это потому, что компилятор видит открытие литерала массива как продолжение предыдущей инструкции, поскольку вы не поставили точку с запятой после определения функции.
Итак, компилятор видит:
Array.prototype.bublleSort = function() {
console.log(this)
}[1, 23, 4].bublleSort();
Возвращается доступ к несуществующему свойству функции undefined
, следовательно, вы получаете ошибку.
Добавьте точку с запятой после функции, чтобы она обрабатывала их как два отдельных оператора. Точки с запятой важны!