1

Date.prototypeWSH-JScriptで日付計算を行うために使用しました。これらの機能もWSH-VBSに含めたいと思います。基本的に、JSコードとVBSコードを混合し、JSファイルをVBSスクリプトに含めると、WSFファイルで機能します。

しかし、拡張DateオブジェクトをVBSで動作させることができません。これは、VBSに同等のDateオブジェクトがなく、VBSでは日付が別の方法で処理されるためだと思います。

VBSで日付関数を再実装するのは悪い考えのようです(他に方法がないことを確信していない限り)。Dateオブジェクト関数に転送するような単純なJSラッパーをVBSスクリプトで記述できる可能性があります。

他に何かアイデアがあれば、とても嬉しいです。

4

2 に答える 2

1

Date次のスクリプトは、Windows 7で機能しました。重要なのは、JScriptオブジェクトとVBScriptDateタイプの間で変換する関数のペアを持っていることだと思います。私のJSDateFromVB例では、VBScriptDateから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>
于 2010-12-23T09:14:10.713 に答える
0

JavaScriptのDateオブジェクトの拡張機能がVBScriptで機能しない理由は、WSHシステムがJavaScriptオブジェクトのプロトタイプの拡張機能に気付かないためです。プロトタイプ定義は、作成したJavaScriptコード内にのみ存在します。VBScript内からアクセスしようとすると、その名前空間にインポートされなかったため、プロトタイプ定義は存在しません。

ただし、通常のJavaScript関数(インポートされる2つの項目の1つ)内でプロトタイプ拡張機能を定義することで、ハックすることができます。もう1つはグローバル変数だと思います。プロトタイプ拡張はJavaScriptDateオブジェクトにのみ存在しますが、VBScriptオブジェクトを拡張することはできません。

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

...次に、VBScriptで「blargh()」を呼び出します。これにより、JavaScriptのDateオブジェクトが変更され、VBScriptに返されるDateオブジェクトで「help()」サブ関数が使用できるようになります。

于 2011-08-03T12:18:31.937 に答える