Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JScript - функция обертка для другой функции (https://javascript.ru/forum/misc/59400-jscript-funkciya-obertka-dlya-drugojj-funkcii.html)

Cache 09.11.2015 16:27

JScript - функция обертка для другой функции
 
Прошу прощения за возможный оффтоп, но вопрос по виндовому JScript'у

есть функция WshShell.Popup
Код:

WshShell=new ActiveXObject('WScript.Shell');
WshShell.Popup(<Text>,<SecondsToWait>,<Title>,<Type>);

где:
<Text> - строка, текст сообщения.
<SecondsToWait> - необязательный, число. Количество секунд, по истечении которого окно будет автоматически закрыто.
<Title> - необязательный, строка. Текст заголовка окна сообщения.
<Type> - необязательный, число. Комбинация флагов, определяет тип кнопок и значка.

хочу сделать что-то типа функции-обертки, которая будет передавать параметры в WshShell.Popup()
при этом нужно передать столько параметров, сколько пришло (т.к. обязательным является только первый)
на сколько я понял, это делается как-то так:
function foo() {
    bar.apply(null, arguments);
}
function bar(a, b, c) {
    // делаем здесь что-нибудь
}

но, как это записать в данном, конкретном случае - так и не понял....

Cache 09.11.2015 16:35

pnpquest,
нужно чтобы функция передавала все переданные аргументы, их может быть от 1 до 4
т.е. вариант с заранее объявленными a,b,c - не подходит

pnpquest 09.11.2015 16:36

У меня нет под рукой венды, проверить не могу, но по идее, можно всегда использовать дефолтные значения
function foo(a,b,c){
  var b = b || 1
  var c = c || 1
  bar(a,b,c)
}

Cache 09.11.2015 17:18

да, спасибо, такой способ работает:
function foo(a,b,c,d){
  var b = b || 0;
  var c = c || '';
  var d = d || 0;
  o.wss.Popup(a,b,c,d);
};

foo('text');

но для собственного развития хотелось бы еще увидеть иные варианты решения, с тем же .apply к примеру

Cache 09.11.2015 17:21

Цитата:

Сообщение от pnpquest (Сообщение 395347)
У меня нет под рукой венды

винда, тут мало на что влияет, так как JScript - почти аналогичен JS, разве что отсутствуют некоторые методы и функции
но метод работы с объектами и их прототипами - по сути тот же, что и в JS

pnpquest 09.11.2015 17:48

Цитата:

Сообщение от Cache
но для собственного развития хотелось бы еще увидеть иные варианты решения, с тем же .apply к примеру

А ты уверен что там работает apply вообще?
Выполни
Function.prototype.apply
, что он ответит интересно.
Цитата:

Сообщение от Cache
так как JScript - почти аналогичен JS

Я как то залезал в этот JScript, я бы не сказал, что он является в полной мере диалектом ecma даже. Хотя формально он им является, да. Но на самом деле, там черт голову сломит. Говно то еще.

pnpquest 09.11.2015 17:52

Цитата:

Сообщение от Cache
винда, тут мало на что влияет

А венда тут влияет на то, что данный интерпретатор встроен в венду, а у меня щас нет ее под рукой, как я уже сказал.

Cache 09.11.2015 18:03

Цитата:

Сообщение от pnpquest (Сообщение 395357)
А ты уверен что там работает apply вообще?
Выполни
Function.prototype.apply
, что он ответит интересно.

ответ:
Код:

function apply() {
        [native code]
}


pnpquest 09.11.2015 18:13

Значит как-то так должно работать
WshShell=new ActiveXObject('WScript.Shell');
function wrap(){WshShell.Popup.apply(null, arguments)}

//или

function wrap(){WshShell.Popup.apply(WshShell, arguments)}

Cache 09.11.2015 18:21

ошибка:
Цитата:

объект не поддерживает свойство или метод
в обоих вариантах


Часовой пояс GMT +3, время: 14:10.