WSH: Как использовать расширенный объект даты JScript в VBS?
Вопрос
я использовал 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 ()».