拡張をコンポーネントに
http://d.hatena.ne.jp/arikui/20070610/1181413433
- Test.WSC
<object id="fso" progid="Scripting.FileSystemObject"/> <script language="JScript"> function Load(path){ var file = fso.OpenTextFile(path); var text = file.ReadAll(); file.Close(); return LoadByText(text); } function LoadByText(code){ eval(code); return { "array" : Array, "boolean" : Boolean, "date" : Date, "error" : Error, "function": Function, "math" : Math, "number" : Number, "object" : Object, "regExp" : RegExp, "string" : String }; } </script>
var test = WSH.CreateObject("Test.WSC"); var code = [ "Object.one = 1;", "Object.two = 2;" ]; var objects = [ test.LoadByText(code[0]), test.LoadByText(code[1]) ]; WSH.Echo("-- this --") for(var x in Object) WSH.Echo(x) WSH.Echo("-- code1 --"); for(var x in objects[0].object) WSH.Echo(x) WSH.Echo("-- code2 --") for(var x in objects[1].object) WSH.Echo(x) /* output -- this -- -- code1 -- one two -- code2 -- one two */
後から追加しても同じコンポーネントオブジェクトでは追加される。違うオブジェクトなら別々になる。
var test = WSH.CreateObject("Test.WSC"); var test2 = WSH.CreateObject("Test.WSC"); /* 略 */ var objects = [ test.LoadByText(code[0]), test2.LoadByText(code[1]) ]; /* 略 */ /* output -- this -- -- code1 -- one -- code2 -- two */
グローバルな関数とかはevalしても使えないようだ(多分)。読み込ませるコード側で工夫してやれば使えるかも。