Я строю библиотеку JavaScript с другом, который, как предполагается сделать создание игры HTML5 проще (но это на самом деле просто для удовольствия), и вот какой-то код у меня возникают проблемы с:Javascript обычай применять функцию
/* Calls f on all the elems of the list that pass p and implement f */
var apply = function (f, p, list) {
for (var i in list) {
if (p(list[i]) === true && list[i][f] != undefined && typeof list[i][f] === 'function') {
list[i][f]();
}
}
};
this.draw = function(p) {
apply(moveView, p, this.views);
};
Пользователь будет вызывать функцию this.draw и передавать ему предикат. Функция moveView, которая передается в функцию apply, будет выполняться только в том случае, если каждый объект в массиве представлений реализовал ее.
Однако моя консоль ошибочно говорит, что «moveView не определен», что имеет смысл, потому что. В тот момент, когда я вызываю свою функцию приложения, я не хочу, чтобы интерпретатор проверял, существует ли moveView или нет, я просто хочу передать его, чтобы я мог проверить, использует ли каждый объект, к которому применяется, реализует эту функцию. Я думал, что, может быть, вызов применяется как apply("draw", p, this.views);
, но это не так, потому что тогда в функции apply функция f больше не является функцией, это строка. Я просто хочу иметь возможность передать любое общее имя функции в мою функцию приложения, чтобы затем я мог выполнить все проверки внутри.
Весь мой код можно найти на моем Github.
EDIT:
/*View object*/
var View = (function(){
var constr = function(f, o, i){
this.frame = utility.checkFrame(f);
this.orient = utility.checkOrientation(o);
/*user identification string*/
this.id = i;
this.moveView = function(){
console.log("testing");
};
};
return constr;
}());
Предполагая, что 'this.views' - это список объектов' View', тогда 'apply (" moveView ", p, this.views)' должно работать нормально. –