WSH: Как использовать расширенный объект даты JScript в VBS?

StackOverflow https://stackoverflow.com/questions/4508903

  •  12-10-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

Следующий сценарий сработал для меня в Windows 7. Я думаю, что у ключа есть пара функций для перевода между JSCRICT 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>

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top