Метод объекта вызывается для объекта, когда сохраняется в переменной, но не тогда, когда объекты хранятся в массиве

#javascript

#javascript

Вопрос:

Я определил временную шкалу класса в Javascript, используя метод конструктора,

 function Timeline(formal parameters)
{
   //property definitions
}
  

Методы определены для объекта-прототипа,

 Timeline.prototype.zoomMax = function(){ // Method Definition };
  

Я использую array для хранения объектов временной шкалы,

 var timeline = [];
timeline[0] = new Timeline(parameter's values);
timeline[1] = new Timeline(parameter's values);
  

Но когда я вызываю метод Timeline как,

 timeline[0].zoomMax();
  

Я получаю сообщение об ошибке,

Неперехваченная ошибка типа: не удается прочитать свойство ‘zoomMax’ из undefined

Примечание: я проверил временную шкалу печати [0], объект сохраняется в ней.

Когда я сохраняю объект в простой переменной вместо массива, это работает нормально,

 var timeline = new Timeline(parameter's values);

timeline.zoomMax(); //Gives me the output
  

Я не понимаю, как мне вызвать метод zoomMax () для объектов, хранящихся в массиве.

Пожалуйста, укажите.

Мой код временной шкалы,

 function Timeline(video_duration_in_sec,frames_per_sec = 25,zoom_value=1){

            ComponentContainer.call(this,'time-cover');
            this.video_duration_in_sec = video_duration_in_sec;
            this.frame_count = video_duration_in_sec * frames_per_sec;
            this.zoom_value = zoom_value;
            this.ruler_width = this.video_duration_in_sec * (100/this.zoom_value);
            this.min = 1;
            this.max = 25;                     


        } 
  

Комментарии:

1. В сообщении об ошибке четко указано, что timeline[0] не определено.

2. Код отлично работает как есть.

3. можете ли вы поделиться тем, как работает ваш конструктор Timeline?

4. ваш код работает нормально попробуйте функцию Timeline() { console.log(«привет»); } Timeline.prototype.zoomMax = function(){ }; var timeline = []; timeline[0] = новая временная шкала(); timeline[1] = новая временная шкала(); timeline[0].zoomMax();

5. @George. S Я обновил вопрос с помощью кода

Ответ №1:

Используйте class ключевое слово для определения класса объекта

 class Timeline 
{
    constructor(parameters) {
        //property definitions, initialization...
    }

    zoomMax() {
        console.log('zoom');
    }
}


var timeline = [];
timeline[0] = new Timeline('parameters values');
timeline[1] = new Timeline('parameters values');

timeline[0].zoomMax();  

Комментарии:

1. Кельчевский Изначально я делал кодирование с использованием ключевого слова class, поскольку оно не поддерживается в Internet Explorer, мне сказали изменить его

2. Используйте какое-нибудь полизаполнение es6 для IE, например babel

Ответ №2:

У меня это работает нормально

     function Timeline(params){ ... }

    Timeline.prototype.zoomMax = function() { ... } 

    var timeline = []
    timeline[0] = new Timeline(param1);
    timeline[1] = new Timeline(param2);

    timeline[0].zoomMax(); // Executes zoomMax function
  

Ваша первоначальная ошибка могла быть вызвана неправильным объявлением метода zoomMax. Дополнительная информация об этом здесь : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Not_a_function