在MS JScript中我可以写
WSH.Echo("hello world");
通过命令行cscript.exe运行它,它按预期工作。
但是如果我想使用函数print()进行打印,一种解决方案是将目标函数分配给一个名为print的变量,就像这样,它适用于大多数JS解释器
var print=WSH.Echo
print("hello world");
但这不适用于cscript.exe并打印以下错误消息
Microsoft JScript runtime error: Object doesn't support this property or method
我做错了吗?是否有任何快捷方式来实现它而无需为每个要重命名的函数编写单独的包装函数?
答案 0 :(得分: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);