jscript函数指针

时间:2011-06-23 14:19:35

标签: javascript wsh

在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

我做错了吗?是否有任何快捷方式来实现它而无需为每个要重命名的函数编写单独的包装函数?

1 个答案:

答案 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);

这只是一个简单的示例,您应该能够使用callapply轻松扩展它,以便返回的函数采用可变数量的参数。