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
答案 0 :(得分:2)
对于作为窗口对象方法实现的非泛型方法,您可以使用.bind
例如:
SMURF.setTimeout = setTimeout.bind(window);
如果方法是通用的,或者你可以做构造函数
SMURF.x = window.x
e.g。
SMURF.FormData = FormData;
工作得很好。
请注意,在IE8中.call
(因此任何.bind
shim)也无法正确更改主机对象的上下文。