Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вызов классов объекта с динамическим именем (https://javascript.ru/forum/misc/50660-vyzov-klassov-obekta-s-dinamicheskim-imenem.html)

max0n 06.10.2014 17:24

Вызов классов объекта с динамическим именем
 
Всем привет!
Суть такова:
Есть пустые объект и массив:
o = new Object();
canvMove = new Array();

далее на странице могут появиться неизвестное количество данных массива, в формате:
canvMove.push([22]);
canvMove.push([75]);
canvMove.push(['Alibaba']);
...

как мне вызвать классы объекта с идентификатором, являющимся значением из массива?
чтоб не в ручную вбивать:
o.func22();
o.func75();
o.funcAlibaba();
...

А перебрать через массив… (вот так у меня не выходит)
for(var i=0; i<canvMove.length; i++){
	(function(d){ //замыкание
		o.func[canvMove[d]]();
	})(i);
}

Делаю это для постепенного запуска анимации, во время прокрутки сайта, при появлении объекта с ID=canvMove[n] в поле зрения.
Если есть идеи как это реализовать, буду благодарен за совет. Спасибо!

Erolast 06.10.2014 17:42

Цитата:

как мне вызвать классы объекта с идентификатором, являющимся значением из массива?
Чо? Ты, наверное, имел в виду методы?

o["func22"]();
o["func75"]();
0["funcAlibaba"]();

max0n 06.10.2014 18:33

Цитата:

Сообщение от Erolast (Сообщение 333729)
Чо? Ты, наверное, имел в виду методы?

o["func22"]();
o["func75"]();
0["funcAlibaba"]();

наверное да )
я ещё новичёк в ООП :)

Можно ли как-то засунуть в массив, чтобы он перебрал все методы?

Erolast 06.10.2014 18:40

Ну разумеется.
var object = {
  one: function() {
    alert(1);
  },
  two: function() {
    alert(2);
  },
  three: function() {
    alert(3);
  }
}

var method_names = ["one", "two", "three"];
for (var i = 0; i < method_names.length; i++) {
  var method_name = method_names[i];
  object[method_name]();
}

XelaNimed 06.10.2014 18:50

Или как вариант, если не известны методы/свойства объекта, то перебирать свойства можно и так:
var obj = {
  "one" : function(){},
  "two" : true,
  "three" : function(){}
}

for(var i in obj){
  if(obj.hasOwnProperty(i)){
    // method
    if(typeof obj[i] == "function"){
      obj[i]();
    } else {
      // property
    }
  }
}


Часовой пояс GMT +3, время: 05:58.