Я пытаюсь реорганизовать кусок кода, который действует на каждую переменную, найденную в массиве variables
, путем добавления имени переменной и соответствующего обратного вызова в объект, который легко повторяется. Проблема в том, что переменные [0] .callback заканчиваются undefined
при вызове Foo.bar (data). Функциональность всего объекта должна оставаться в самом объекте.Назначение обратного вызова объекту внутри объекта
До сих пор мое единственное решение заключалось в том, чтобы определить функции, когда они назначены переменным обратного вызова, но это не так идеально, потому что сами обратные вызовы не могут получить доступ к требуемым переменным.
...
{name: "x", callback: function() {...}},
...
Желаемая Функциональность:
console.log(Foo.variables[0].callback != undefined) //true
Foo.bar(); //Will print "y"
Я пропускаю что-то глупо? Или я должен использовать другой шаблон для решения этой конкретной проблемы?
Спасибо за помощь!
var Foo = {
variables: [
{name: "x", callback: this.funX},
{name: "y", callback: this.funY},
{name: "z", callback: this.funZ}
],
//For this example, data could be the following object
// data = {x: 0, y: 1, z: 0};
bar: function(data) {
this.variables.forEach(function(elem) {
if(data[elem.name] == 1)
elem.callback();
});
},
funX: function() {
console.log(this.variables[0].name);
},
funY: function() {
console.log(this.variables[1].name);
},
funZ: function() {
console.log(this.variables[2].name);
}
}
Несколько актуальны:
javascript: call function inside object, from a callback function
@CoryDanielson - Мои извинения - я буду править пост и сделать его более четким. В то же время я хочу вызвать Foo.bar (data) и иметь консоль.log («y»). – TMan
Хмм, я собираюсь сделать быструю скрипку. Я думаю, что получаю то, что вы просите –
Вы неправильно поняли, как это работает в JavaScript. [MDN this - JavaScript] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this) – Givi