Я определил функцию-прототип Array, но это вызывает ошибку при вызове - PullRequest
0 голосов
/ 05 марта 2019

Я определил функцию-прототип Array, но при вызове выдает ошибку.

Array.prototype.bublleSort = function() {
  console.log(this)
}

[1, 23, 4].bublleSort()

В консоли отображается сообщение «Uncaught TypeError: Невозможно прочитать свойство« bublleSort »из неопределенного».Это где-то не так?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Это потому, что компилятор видит, что открытие литерала массива продолжается в предыдущем операторе, поскольку после определения функции вы не ставили точку с запятой.

Таким образом, компилятор видит:

Array.prototype.bublleSort = function() {
  console.log(this)
}[1, 23, 4].bublleSort();

При доступе к несуществующему свойству функции возвращается undefined, поэтому вы получаете ошибку.

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

0 голосов
/ 05 марта 2019

Вы забыли точку с запятой, поэтому интерпретатор видит ваш код следующим образом:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...