#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