WSH:VBSで拡張されたJScript日付オブジェクトを使用する方法は?
質問
利用した Date.prototype
私のWSH-JScriptsでは、日付計算を行うために。これらの機能もWSH-VBSに含めたいと思います。基本的に、JSとVBSコードをミキシングし、VBSスクリプトにJSファイルをWSFファイルで機能させます。
しかし、私は拡張を得ることができません Date
VBSで動作するオブジェクト。それは同等のものがないからだと思います Date
VBSのオブジェクトと日付は、VBSで別の方法で処理されます。
VBSの日付関数を再実装することは悪い考えのようです(他の方法がないことを確信していない限り)。 VBSスクリプトにシンプルなJSラッパーを書くことが可能です。 Date
オブジェクト関数。
他のアイデアがあれば、私はそれを見ることができてとてもうれしいです。
解決
次のスクリプトは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>
他のヒント
JavaScriptの日付オブジェクトへの拡張機能がVBScriptで機能していない理由は、WSHシステムがJavaScriptオブジェクトのプロトタイプの拡張機能に気付かないためです。プロトタイプ定義は、作成したJavaScriptコード内にのみ存在します。VBScript内からアクセスしようとするとすぐに、その名前空間にインポートされたことがないため、存在しません。
ただし、通常のJavaScript関数内でプロトタイプ拡張機能を定義することにより(これはインポートされる2つのアイテムの1つです - もう1つはグローバル変数だと思います)。ただし、プロトタイプの拡張はJavaScriptの日付オブジェクトにのみ存在します - VBScriptオブジェクトを拡張することはできません。
function blargh() {
Date.prototype.help = function() {...};
...
}
...次に、VBScriptで「blargh()」を呼び出します。これは、javascriptの日付オブジェクトを変更して、vbscriptに返される日付オブジェクトが「help()」サブ機能を使用できるようにします。