.wsfの謎
2007-06-12


ちょっと.wsfに手を出してみたり

いちいちソースロードのスクリプトを書く(つーかコピペなんだけどね)のがめんどくさくなってきたので、.wsfに手を出してみたが、よくわからないことに。

まぁ、例によってprototype.jsを使いたいのでその検証とかしていたのだが、Object.extend(this, {})でグローバルに追加したメソッドを呼び出すと異常終了するという不可解な現象に出くわした。

コケるソース

こんなヤツ。

<?xml version="1.0" standalone="yes"?>
<job id="testJob">
        <script language="JScript">
Object.extend = function(dest, src) {
        for(var prop in src) dest[prop] = src[prop];
        return dest;
}
Object.extend( this, {
        testMethod : function() {
                return "test";
        }
} );
// ↓ ここで落ちる。正確にはtestMethodの呼び出し時。
WScript.Echo( this.testMethod() );
        </script>
</job>

検証用にprototype.jsは使わずにObject.extendのみ定義してやっているが、このコードを実行すると

問題が発生したため、Microsoft (r) Windows Based Script Host を 終了します。ご不便をおかけして申し訳ありません。 とでて落っこちる。なかなか非道い話だ。

こうするとコケない

ためしにObject.extendを使用せずにvar testMethod =〜と改良してみた。

<?xml version="1.0" standalone="yes"?>
<job id="testJob">
        <script language="JScript">
Object.extend = function(dest, src) {
        for(var prop in src) dest[prop] = src[prop];
        return dest;
}
var testMethod = function() {
        return "test";
};
WScript.Echo( this.testMethod() );
        </script>
</job>
これではコケない。なんで??

ひょっとすると環境依存とかあるのかも知れないのでちょっと調べてみよう。

[JavaScript]
[WSH]

コメント(全2件)
コメントをする


記事を書く
powered by ASAHIネット