Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.11.2016, 17:38
Новичок на форуме
Отправить личное сообщение для crazyIvan Посмотреть профиль Найти все сообщения от crazyIvan
 
Регистрация: 10.11.2016
Сообщений: 5

Метод не может прочитать свойство.
Всем привет, решил написать первое приложение и тут же встрял.

Создал 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, 10.11.2016 в 17:40.
Ответить с цитированием
  #2 (permalink)  
Старый 10.11.2016, 18:27
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

crazyIvan,
Брат
1) В конструкторе свойства и методы через ; а не запятую
2) У тебя косяк был в методе
this.secondNumWorks = function(array) {
var randNum = getRandomIndex(array); // <---
};

Видишь? не указан this
Ответить с цитированием
  #3 (permalink)  
Старый 10.11.2016, 18:46
Новичок на форуме
Отправить личное сообщение для crazyIvan Посмотреть профиль Найти все сообщения от crazyIvan
 
Регистрация: 10.11.2016
Сообщений: 5

Спасибо.
Слона я и не заметил, но добавление ключевого слова 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

Я в прострации
Ответить с цитированием
  #4 (permalink)  
Старый 10.11.2016, 18:48
Новичок на форуме
Отправить личное сообщение для crazyIvan Посмотреть профиль Найти все сообщения от crazyIvan
 
Регистрация: 10.11.2016
Сообщений: 5

Сообщение от Coriolan161 Посмотреть сообщение
crazyIvan,
Брат
1) В конструкторе свойства и методы через ; а не запятую
2) У тебя косяк был в методе
this.secondNumWorks = function(array) {
var randNum = getRandomIndex(array); // <---
};

Видишь? не указан this
Все вопрос снят, я затупил.
У меня методы объекта вызываются раньше, чем создается массив.

Спасибо вам большое, видимо я действительно идиот)))
Сижу голову ломаю, что, почему, а все просто оказалось!
Удачи.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как асинхронно вызвать метод? PMaster Общие вопросы Javascript 14 17.07.2016 20:25
метод children sash003 Events/DOM/Window 8 09.07.2015 22:31
id элемента не может начинаться с цифры? Kolyaj Events/DOM/Window 4 01.12.2010 17:25
если (свойство css == 2) свойство css = 1; funkypublic Events/DOM/Window 1 09.06.2010 17:39
Статья о JavaScript Plest Оффтопик 17 12.11.2009 12:24