Метод не может прочитать свойство.
Всем привет, решил написать первое приложение и тут же встрял.
Создал 4 функции: 1. Первая функция генерирует работу первого спортсмена. 2. Вторая функция генерирует работу второго спортсмена. 3. Третья функция генерирует случайное число, размером не больше массива переданного в качестве аргумента. 4. Функция вызывает первую и вторую функцию, каждая из которых возвращает значение и выводит его в консоль. Все работало, добавил новый конструктор и сделал функции его методами. В итоге при вызове получаю ошибку Uncaught TypeError: Cannot read property 'length' of undefined(…). Помогите разобраться в чем дело, а то я ума не приложу. Я буду вам очень благодарен. // Функция конструктор тренировки. function training(roundLength, numberOfRounds, restTime) { this.roundLength = roundLength, this.numberOfRounds = numberOfRounds, this.restTime = restTime, this.trainingDuration = function() { var timeOfTraining = (((this.numberOfRounds * this.roundLength) + (this.restTime * this.numberOfRounds)) / 60); return timeOfTraining; }, this.firstNumWorks = function(array){ var randNum = this.getRandomIndex(array); var textWork = "Первый номер атакует " + randNum; return textWork; }, this.secondNumWorks = function(array) { var randNum = getRandomIndex(array); var randTactic = this.getRandomIndex(tactic); var textWork = ", второй номер" + randTactic + randNum; return textWork; }, this.getRandomIndex = function(array) { var num = Math.floor(Math.random() * array.length); return array[num]; }, this.createNewRoutime = function() { var time = this.numberOfRounds; for (var i = 0; i < time; i = i + 1) { console.log(this.firstNumWorks(punches) + this.secondNumWorks(punches)); } }; }; // Создаем первую тренировку. var firstTraining = new training(180, 20, 60) console.log(firstTraining.trainingDuration()); Этот метод не вызывается и выдает ошибку>>> console.log(firstTraining.getRandomIndex(punches)) ; // Массив одиночных ударов. var punches = ["левым прямым", "правым прямым", "левым боковым", "правым боковым", "левым снизу", "правым снизу"]; // Массив двух - ударных комбинаций в голову. var combHead = ["Левый прямой - Правый прямой", "Левый боковой - правый прямой", "Левый снизу - правый прямой"]; // Массив двух - ударных комбинаций по этажам. var combFloor =[]; // Массив защитных техник var defence = ["Подставка", "Сбив", "Блок предплечьем", "Блок плечом", "Уклон", "Нырок", "Сайдстеп"]; // Массив характеров нанесения ударов var tactic = [" отвечает ему ", " встречает его "]; /* Здесь все работало >>> // Функция возвращаются случайный элемент массива. // Проверено! function getRandomIndex(array) { var num = Math.floor(Math.random() * array.length); return array[num]; }; // Функции создающие случайные задания. // Проверено! function firstNumWorks(array){ var randNum = getRandomIndex(array); var textWork = "Первый номер атакует " + randNum; return textWork; }; // Работа второго номера на встречу. // Проверено! function secondNumWorks(array) { var randNum = getRandomIndex(array); var randTactic = getRandomIndex(tactic); var textWork = ", второй номер" + randTactic + randNum; return textWork; }; // Создает задание за счет вызова firstNumWorks и secondNumberWorks и выводит его в консоль. // Проверено! function createNewWork(Obj){ var trainingTime = Obj.trainingDuration(); for(var i = 0; i < trainingTime; i = i + 1) { console.log(firstNumWorks(punches) + secondNumWorks(punches)) } }; */ |
crazyIvan,
Брат 1) В конструкторе свойства и методы через ; а не запятую 2) У тебя косяк был в методе this.secondNumWorks = function(array) { var randNum = getRandomIndex(array); // <--- }; Видишь? не указан this |
Спасибо.
Слона я и не заметил, но добавление ключевого слова this ничего не изменило или я идиот. Выдает следующее: test.html:31 Uncaught TypeError: Cannot read property 'length' of undefined(…) getRandomIndex @ test.html:31 firstNumWorks @ test.html:20 (anonymous function) @ test.html:44 Я в прострации :cray: |
Цитата:
У меня методы объекта вызываются раньше, чем создается массив. Спасибо вам большое, видимо я действительно идиот))) Сижу голову ломаю, что, почему, а все просто оказалось! Удачи. |
Часовой пояс GMT +3, время: 22:03. |