Я полный javascript newb, и я пытаюсь обмотать голову вокруг OLN. Я сталкиваюсь с тем, что при вызове метода объекта из другого метода на том же объекте значение локального значения «this» в вызываемом методе изменяется. Вот мой код:Javascript «это» значение меняется, но не может понять, почему
var generator = {
generateForLevelSkillAndCount : function(level, skill, count) {
var functionCall = this['generate_' + level + '_' + skill];
return functionCall(count);
},
generate_0_4 : function(count) {
return this.generate_generic_dots(count, 3);
},
generate_generic_dots : function(count, maxDots) {
/* do cool stuff and return it */
}
};
Итак, я называю generator.generateForLevelSkillAndCount(0, 4, 20)
и она работает должным образом, вызывая generate_0_4(count)
. Тем не менее, это то, где он терпит неудачу, поскольку консоль Javascript от Chrome сообщает мне: «Uncaught TypeError: Object [object DOMWindow] не имеет метода« generate_generic_dots »».
я знаю достаточно, чтобы знать, что проблема заключается в том, что значение this
в generate_0_4
является объектом DOMWindow, а не генератор (что this
указывает в generateForSkillLevelAndCount
, но я не могу понять, почему это, возможно, будет происходит
Update:.. Я обновил пример кода на предложение CMS, чтобы избавиться от eval
, но та же ошибка возвращается, так что это не просто eval
ошибка
Ahhh, радости динамического обзора! – leppie