如何正确映射函数构造函数

How to properly map function constructors?

本文关键字:构造函数 映射函数 何正确      更新时间:2023-09-26

Me和Smurfette正在将本机函数映射到一个新的smurfy命名空间,我们称之为

SMURF

为了做到这一点,我们通过在正确的上下文中从中调用函数,来确保并映射这个值的正确值。有很多方法可以做到这一点,但这只是其中之一。

例如,

SMURF.getComputedStyle = function(){
  return win.getComputedStyle.apply(win, arguments);
};

但是,对于OO风格的函数对象,该如何做到这一点呢?特别是

SMURF.FormData = win.FormData;

这可以用同样的方式吗?

呼叫机制不同,这就是我们为什么要问的原因。

new SMURF.FormData();

与相反

SMURF.getComputedStyle();

这里有一个相关的问题。

我想隐含的问题是,apply可以用于函数构造函数吗?

澄清:

与Pre-IE9 无关

对于作为窗口对象的方法实现的非泛型方法,您可以使用.bind,例如:

SMURF.setTimeout = setTimeout.bind(window);

如果该方法是泛型或构造函数,您可以只执行

SMURF.x = window.x

例如

SMURF.FormData = FormData;

会很好用的。

请注意,在IE8中,.call(因此也包括任何.bind填充程序)无法正确更改主机对象的上下文。