-3

我和 Smurfette 正在将原生函数映射到我们称之为新的 smurfy 命名空间

SMURF

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

例如,

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

但是,对于 OO 风格的函数对象,这将如何实现呢?特别,

SMURF.FormData = win.FormData;

可以以相同的方式完成吗?

调用机制不同,这就是我们问的原因。

new SMURF.FormData();

SMURF.getComputedStyle();

这是一个相关的问题

我猜隐含的问题是,可以apply在函数构造函数上使用吗?

澄清:

不关心 Pre-IE9

4

1 回答 1

2

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

SMURF.setTimeout = setTimeout.bind(window);

如果该方法是通用的或构造函数,你可以这样做

SMURF.x = window.x

例如

SMURF.FormData = FormData;

会工作得很好。

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

于 2013-07-27T22:43:03.777 回答