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

时间:2013-07-27 22:35:03

标签: javascript

Me和Smurfette正在将原生函数映射到我们称之为

的新smurfy命名空间
SMURF

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

例如,

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

但是,如何为OO样式函数对象做到这一点?特别地,

SMURF.FormData = win.FormData;

这可以用同样的方式完成吗?

呼叫机制不同,这就是我们要求的原因。

new SMURF.FormData();

而不是

SMURF.getComputedStyle();

这是related question

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

澄清:

不关心Pre-IE9

1 个答案:

答案 0 :(得分:2)

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

SMURF.setTimeout = setTimeout.bind(window);

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

SMURF.x = window.x

e.g。

SMURF.FormData = FormData;

工作得很好。

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