LINUX.ORG.RU

Вызвать apply для инстанса (странного) обьекта

 ,


0

1

дано: платформа — офтоп программа с «встроенной» JS VM. VM используется от установленного в системе Internet Explorer. Но и это еще не все. Судя по всему я даже не «получаю» все возможности этой VM ибо alert(typeof JSON) говорит undefined (вместо алерта у меня другой костыль, алерт тоже андефайнед).

офтоп программа экспортирует в JS некий набор функций. Одна их них создает обьект «не из мира сего». хотелось бы иметь способ вызывать любую функцию этого обьекта и передавать свойственные ей параметры через apply

имею пример кода, который успешно падает

name
string
TypeError
message
string
Wrong number of arguments or invalid property assignment
number
number
-2146827838
description
string
Wrong number of arguments or invalid property assignment
Ok

скажите, у меня есть шанс или я буду вынужден поддержывать злостный быдлокод

// по мотивам старых тредов приглашаю zz дать умных советов

★★★★★

Последнее исправление: ZuBB (всего исправлений: 3)

Можно более минимальный код, а лучше

try
 foo.bar(arg1, arg2) 
catch
 pass
try
  foo.apply(foo, [arg1, arg2])
catch
  pass
И аргументы явно а не переменными. Из дат поссибл?

zz ★★★★
()
Ответ на: комментарий от Kalashnikov

ибо у меня есть 10 разных GraphViewObj и каждый с своим собственным набором функций (SetScale, SetDescription, итд) которые нужно применить и соответсвенно параметров

ZuBB ★★★★★
() автор топика
Последнее исправление: ZuBB (всего исправлений: 1)
Ответ на: комментарий от zz

чесно говоря не понял ничего. мож завтра с утра прочитаю твой ответ по-другому

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от Kalashnikov

я думаю что лучше найти способ (я не утверждаю что он существует, я питаюсь узнать это) написать 1 классный кусок кода нежели сделать 100 копипаст

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от Kalashnikov

и да, из всего этого огорода как ты выразился мне интересна по факту одна строчка

  view[method].apply(view, params);
ZuBB ★★★★★
() автор топика

zz, Kalashnikov возможно есть какой-то другой способ «переделать» массив в списоквид, который можна использовать как параметры функции?

ZuBB ★★★★★
() автор топика
Последнее исправление: ZuBB (всего исправлений: 1)
Ответ на: комментарий от ZuBB

Ох лол, там конечно же foo.bar.apply, я имел ввиду ты сделай тест кейз который гарантированно работает с просто вызовом и при этом не работает с apply. В т.ч. чтобы избежать малоли чего, передавай аргументы значениями.

zz ★★★★
()
Ответ на: комментарий от ZuBB

В качестве крайнего варианта можно автоматически нагенерить чего нибудь такого:

if(args.length === 1)
  foo(args[0])
if(args.length === 2)
  foo(args[0], args[1])
Но мне кажется должно работать и с apply.

zz ★★★★
()
Ответ на: комментарий от zz

один из видов «крайнего варианта» у меня уже есть, а хочется краткого и красивого кода..

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от zz

работает следующее

        view[method](params[0], params[1]);

не работает ни так (лишний аргумент)

	view[method](params[0], params[1], params[2]);

ни так (c apply)

        view[method].apply(view, [params[0], params[1]]);

в этом коде есть 2 «места» где возможен сбой

1. view[method]
2. (view

Вместо №2 я пытался использовать null, this, view. Бестолку. Вместо №1 я не знаю что еще можна использовать

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от zz

должно работать и с apply.

чем дальше разбираюсь тем больше кажется что не должно. поскольку GraphViewObj «не из мира сего» (с той стороны виндовый C/C++/MFC если это имеет значение), apply скорее всего не может применить всю свою «джаваскриптовую магию» относительно как раз его, а не списка параметров

поэтому я больше надесь в

какой-то другой способ «переделать» массив в списоквид, который можна использовать как параметры функции

ZuBB ★★★★★
() автор топика
Последнее исправление: ZuBB (всего исправлений: 1)
Ответ на: комментарий от zz

Другого нет

будет

Similar to Ruby's splat operator, spread will unpack an array into a formal argument list. Amongst other things this allows the members of a rest parameter to be passed as a set of formal arguments to another function

ZuBB ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.