f8g

拡張をコンポーネントに

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しても使えないようだ(多分)。読み込ませるコード側で工夫してやれば使えるかも。