Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.11.2015, 16:27
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

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:28. Причина: link
Ответить с цитированием
  #2 (permalink)  
Старый 09.11.2015, 16:35
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

pnpquest,
нужно чтобы функция передавала все переданные аргументы, их может быть от 1 до 4
т.е. вариант с заранее объявленными a,b,c - не подходит
Ответить с цитированием
  #3 (permalink)  
Старый 09.11.2015, 16:36
Аспирант
Посмотреть профиль Найти все сообщения от pnpquest
 
Регистрация: 09.11.2015
Сообщений: 94

У меня нет под рукой венды, проверить не могу, но по идее, можно всегда использовать дефолтные значения
function foo(a,b,c){
  var b = b || 1
  var c = c || 1
  bar(a,b,c)
}
Ответить с цитированием
  #4 (permalink)  
Старый 09.11.2015, 17:18
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

да, спасибо, такой способ работает:
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 к примеру
Ответить с цитированием
  #5 (permalink)  
Старый 09.11.2015, 17:21
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

Сообщение от pnpquest Посмотреть сообщение
У меня нет под рукой венды
винда, тут мало на что влияет, так как JScript - почти аналогичен JS, разве что отсутствуют некоторые методы и функции
но метод работы с объектами и их прототипами - по сути тот же, что и в JS
Ответить с цитированием
  #6 (permalink)  
Старый 09.11.2015, 17:48
Аспирант
Посмотреть профиль Найти все сообщения от pnpquest
 
Регистрация: 09.11.2015
Сообщений: 94

Сообщение от Cache
но для собственного развития хотелось бы еще увидеть иные варианты решения, с тем же .apply к примеру
А ты уверен что там работает apply вообще?
Выполни
Function.prototype.apply
, что он ответит интересно.
Сообщение от Cache
так как JScript - почти аналогичен JS
Я как то залезал в этот JScript, я бы не сказал, что он является в полной мере диалектом ecma даже. Хотя формально он им является, да. Но на самом деле, там черт голову сломит. Говно то еще.

Последний раз редактировалось pnpquest, 09.11.2015 в 17:50.
Ответить с цитированием
  #7 (permalink)  
Старый 09.11.2015, 17:52
Аспирант
Посмотреть профиль Найти все сообщения от pnpquest
 
Регистрация: 09.11.2015
Сообщений: 94

Сообщение от Cache
винда, тут мало на что влияет
А венда тут влияет на то, что данный интерпретатор встроен в венду, а у меня щас нет ее под рукой, как я уже сказал.
Ответить с цитированием
  #8 (permalink)  
Старый 09.11.2015, 18:03
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

Сообщение от pnpquest Посмотреть сообщение
А ты уверен что там работает apply вообще?
Выполни
Function.prototype.apply
, что он ответит интересно.
ответ:
Код:
function apply() {
	[native code]
}
Ответить с цитированием
  #9 (permalink)  
Старый 09.11.2015, 18:13
Аспирант
Посмотреть профиль Найти все сообщения от pnpquest
 
Регистрация: 09.11.2015
Сообщений: 94

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

//или

function wrap(){WshShell.Popup.apply(WshShell, arguments)}
Ответить с цитированием
  #10 (permalink)  
Старый 09.11.2015, 18:21
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

ошибка:
Цитата:
объект не поддерживает свойство или метод
в обоих вариантах
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
График для функции Бесселя nurik235 Общие вопросы Javascript 0 13.02.2015 14:47
Функция для дозагрузки контента Wahtel Ваши сайты и скрипты 3 06.01.2015 18:05
Как вызвать eval в контексте другой функции для доступа к ее локальным переменным? Почемучкин Общие вопросы Javascript 8 29.10.2012 22:31
Кросс-браузерные функции B~Vladi Ваши сайты и скрипты 128 01.09.2009 17:11
Проверка существования входного параметра для функции Axe Я не знаю javascript 2 25.05.2009 14:58