Ошибка JavaScript: * не является функцией - PullRequest
0 голосов
/ 08 октября 2009

Я использую JavaScript для вызова функций, которые были помещены в объект, например так:

generatewidgets['mywidget'] = function (mystring) { code }

Позже я перебираю этот объект и вызываю каждую функцию со строковым параметром.

argument = 'abcdefg';
for (this.key in generatewidgets)
    generatewidgets[this.key](argument);

Это отлично работает в IE8, но в Firefox выдает ошибку «аргумент не является функцией». Это делается с любым именем переменной, которое я указываю для строки. Я также попробовал:

generatewidgets[this.key](argument+'');

, в результате чего "abcdefg не является функцией". Кто-нибудь знает, что означает эта ошибка или почему я ее получаю?

Ответы [ 3 ]

1 голос
/ 08 октября 2009

Вы также можете проверить тип перед звонком:

for (var key in generatewidgets) {
  if (typeof generatewidgets[key] === 'function')
    generatewidgets[key](argument);
}

Это, вероятно, хорошая идея в любом случае, если в будущем вы захотите добавить нефункциональный элемент к объекту.

0 голосов
/ 13 октября 2009

Перечисление по свойствам объекта будет перечислять по всем свойствам этого объекта, включая те, которые вы сами не задавали. Это может быть проблемой с некоторыми библиотеками JS, которые устанавливают объекты в Object.prototype, поскольку при перечислении свойств вашего объекта эти свойства будут включены в прототип.

Лично я считаю, что способ перечисления объектов в JavaScript нарушен, но уже слишком поздно что-либо делать с этим.

0 голосов
/ 08 октября 2009

Это работает в Firefox 3.5 для меня. Вот как я тестировал:

>>> var generatewidgets = {}, argument = 'abcdefg';
>>> generatewidgets['mywidget'] = function(mystring) { console.log(mystring); }
function()
>>> for (this.key in generatewidgets) generatewidgets[this.key](argument);
abcdefg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...