При написании скрипта столкнулся с такой проблемой:
В ниже прикрепленном фрагменте упрощенного кода в который я помечу нужный участок, при вызове через apply()
, на втором прохождении появляется ошибка:
Uncaught TypeError: CreateListFromArrayLike called on non-object
То есть первый раз он срабатывает корректно. А во втором прохождении происходит ошибка, ещё до входа в функцию. При этом, если apply()
заменить на call()
, то всё начинает работать корректно.
Возможно я не до конца понимаю разницу в этих методах. Вроде разница лишь в динамическом диапазон аргументов у apply()
. Хотя возможно я что то путаю.
Был бы рад если мне пояснили причину такого поведения. Вот тут весь код. Заранее спасибо.
function MetaRow(name,value){
this.name = name;
this.value = value;
}
function MetaGroup(name){
this.name = name;
this.items = {};
this.groups = {};
}
MetaGroup.prototype.set = function(key,meta,replace = false)
{
if(meta instanceof MetaRow){
//Добавляем строку
}
else if(meta instanceof MetaGroup){
//Добавляем группу
}
}
function FormMeta(forms)
{
this.forms = forms;
this.Global = new MetaGroup();
FormMeta.prototype.update.apply(this);
}
FormMeta.prototype.get = function(key)
{
return this.Global.groups[key] != undefined ? this.Global.groups[key] : this.Global.groups['main'];
}
FormMeta.prototype.pickRadio = function(form)
{
var glob = this;
$(form).find('radio-group').each(function(i,val){
var targetGroup,mid,rid,rname;
//Далее я заполняю переменные ничего интересного
//Вот на это строке в момент вызова apply() генерируется ошибка
FormMeta.prototype.get.apply(glob,mid).set(rid, new MetaRow(rname),true);
})
http://www.w3schools.com/js/js_function_invocation.asp - apply
принимает параметры вызова в виде массива:
FormMeta.prototype.get.apply(glob, [mid]).set(rid, new MetaRow(rname), true);
или
FormMeta.prototype.get.call(glob, mid).set(rid, new MetaRow(rname), true);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имеется модальное окно fancyboxКонтента в модальном окне может быть много
В консоли вижу ошибку вида : bundlejs:11899 Uncaught TypeError: Cannot read property 'fn' of undefined
Начал подробнее изучать вопрос построения сайта без перезагрузки страницПервым делом поработал с чистым PJAX