WSH: Как использовать расширенный объект даты JScript в VBS? - PullRequest
1 голос
/ 22 декабря 2010

Я использовал Date.prototype в моих скриптах WSH-JScripts для вычисления даты.Я хотел бы также включить эти функции в WSH-VBS.По сути, смешивание кода JS и VBS и включение файлов JS в сценарий VBS работает в файлах WSF.

Но я не могу заставить расширенный объект Date работать в VBS.Я полагаю, это потому, что в VBS нет эквивалентного объекта Date, а даты обрабатываются в VBS другим способом.

Повторная реализация моих функций дат в VBS кажется плохой идеей (пока я точно не знаю, что другого пути нет).Можно было бы написать простые JS-оболочки в VBS-скрипте, которые как бы пересылают функции объектов Date.

Если есть какая-либо другая идея, я был бы очень рад ее увидеть.

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

Следующий скрипт работал для меня в Windows 7. Я думаю, что ключ имеет пару функций для преобразования между объектом JScript Date и типом VBScript Date. JSDateFromVB в моем примере - очень грубая функция, переводящая из VBScript Date в JScript Date.

<job id="test">
    <script language="JScript">
        if (typeof Date.prototype.prettyPrint === 'undefined')
        {
            Date.prototype.prettyPrint = function () {
                return this.getFullYear() + '-' +
                    (this.getMonth()+1) + '-' +
                    this.getDate();
            }
        }

        function makeDate(vbDate) {
            return new Date(vbDate);
        }
    </script>
    <script language="VBScript">
        Dim d
        d = DateSerial(2000, 11, 30)

        Dim js_d
        Set js_d = JSDateFromVB(d)

        WScript.Echo js_d.prettyPrint()

        Function JSDateFromVB(pDate)
            Set JSDateFromVB = makeDate(pDate)
        End Function
    </script>
</job>
0 голосов
/ 03 августа 2011

Причина, по которой ваши расширения для объекта Date в JavaScript не работают в VBScript, заключается в том, что система WSH не замечает расширения для прототипа любого объекта JavaScript.Определение прототипа существует только в написанном вами коде JavaScript - как только вы пытаетесь получить к нему доступ из VBScript, его не существует, поскольку он никогда не импортировался в это пространство имен.

Вы можете взломать егов то же время - путем определения расширения прототипа в обычной функции JavaScript (которая является одним из двух импортируемых элементов - я полагаю, что другой является глобальными переменными).Расширение прототипа может существовать только в объектах JavaScript Date, однако вы не можете расширять объекты VBScript.

function blargh() {
  Date.prototype.help = function() {...};
  ...
}

... тогда в вашем VBScript вы будете вызывать "blargh ()", который будет изменять объект DateJavaScript, так что любой объект Date, возвращаемый в VBScript, будет иметь доступную подфункцию «help ()».

...