2011-06-23 16 views
0

MS JScriptで私はJScriptの関数ポインタ

WSH.Echo("hello world"); 

を書くことができると期待どおりに動作コマンドラインます。cscript.exeを通してそれを実行します。

しかし、私は、関数の印刷を(使用する場合)印刷のため、1つの解決策は、ほとんどのJSインタプリタ

var print=WSH.Echo 
print("hello world"); 

しかし、それと連動しており、このように、印刷と呼ばれる変数にターゲット機能を割り当てることですcscript.exeで動作せず、次のエラーメッセージが表示されます。

私は何か間違っていますか?名前を変更したい各関数に対して個別のラッパー関数を記述することなく、それを達成するための簡単な方法がありますか?

答えて

2

呼び出されている関数のコンテキストが変化しています。 Echo関数にthisという相対参照が含まれている場合は、その関数をWSHオブジェクトのコンテキストで呼び出す必要があります。簡単な解決策は、単にラッパー関数を使用することです:

var print = function (param) 
{ 
    WSH.Echo(param); 
}; 

、もちろんあなたがラッパージェネレータを作成したいと思うので、繰り返し行うために吸うこと:

function alias(fn, context) 
{ 
    return function(param) 
    { 
    context[fn](param); 
    }; 
} 

var print = alias('Echo', WSQ); 

これはただであります単純な例では、callapplyを使って簡単にこれを拡張できるので、返される関数は可変の引数を取ることができます。

+0

これはうまくいきました:)ありがとうございます。 – CDR