Почему JS map () возвращает ошибку TypeError? - PullRequest
0 голосов
/ 28 июня 2018

В этом упрощенном фрагменте кода я передаю объект, содержащий два свойства, функции normalize.

function normalize() {  
  console.log(this.coords.map(n => n / this.length));  
}

normalize({coords: [0, 2, 3], length: 5});

// OUTPUT: Uncaught TypeError: Cannot read property 'map' of undefined

Выдает ошибку типа.

С другой стороны, не передает объект в вызывающую функцию, она работает:

    function normalize() {  
      console.log(obj.coords.map(n => n / obj.length));  
    }

    obj = {
        coords: [0, 2, 3],
        length: 5
    }

    normalize();
    // OUTPUT: [0, 0.4, 0.6]

Per MDN map() для правильного выполнения требуется вызывающий массив, и coords, по-видимому, правильно передается (как массив) в обоих примерах.

Почему это происходит? Что не так в первом фрагменте кода?

1 Ответ

0 голосов
/ 28 июня 2018

Поскольку вы передаете данные в качестве параметра, вы хотите использовать параметр вместо использования this.

, поэтому this.coords становится obj.coords, а this.length становится obj.length.

function normalize(obj) {
  console.log(obj.coords.map(n => n / obj.length));
}

normalize({
  coords: [0, 2, 3],
  length: 5
});

Если вы хотите использовать это, то вам придется сделать функцию прототипом, подобным этому, и тогда вы не передадите элементы в качестве параметра (создание таких прототипов обычно не рекомендуется):

Object.prototype.normalize = function() {
  return this.coords.map(n => n / this.length);
}

console.log({
  coords: [0, 2, 3],
  length: 5
}.normalize());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...