.wsfの謎2007年06月12日 21時08分20秒

ちょっと.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>
これではコケない。なんで??

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

コメント

_ rykomats ― 2007年06月13日 11時22分39秒

いつも楽しく拝見させてもらっています。
prototype.jsではありませんが、僕も同じ現象を以前体験しました。
http://blog.trirhino.com/komatsu/1163080783
http://blog.trirhino.com/komatsu/1163167827
どうやらwsfのバグ臭い感じがします。

_ dara-j ― 2007年06月13日 11時40分52秒

小松さん、コメントありがとうございます。
MochiKit、便利そうですね。ブラウザに依存しないモジュールだけロードできるのは、ダミーライブラリ作らないでよいのでうらやましいです。

.wsfって.jsや.vbsを起動したときと違って、グローバルに「getResource()」やら「createScriptlet()」やらが追加されてるので、オブジェクトモデルが違うんでしょうね。
まぁ、メソッド呼び出しでプロセスごと落ちるってのはかなりアレなんですけど。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://dara-j.asablo.jp/blog/2007/06/12/1575879/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。