这在Chrome中可以运行,但在IE中却不行,为什么?

9
var shell = function (method) {
        window[method].apply(null, Array.prototype.slice.call(arguments, 1));
    };

shell('alert', 'monkey!');

12
因为IE是邪恶的。 - Jimmy
1
请参考以下问题的答案:https://dev59.com/vHVD5IYBdhLWcg3wAWkO - Tim S. Van Haren
1
不,Array.prototype.slice.call(arguments, 1) 是可以的。 - gblazex
1
@Tim 他已经在使用 Array.prototype.slice - Pointy
@Jimmy 这里不是这样的情况。标准并没有要求这种行为。 - gblazex
1个回答

10

alert.apply是问题所在。alert不是语言的一部分,因此它可能甚至不是一个函数。它是实现相关的


4
жІЎй—®йўҳпјҢжҲ‘еҸҜд»ҘдёәжӮЁжҸҗдҫӣзҝ»иҜ‘гҖӮд»ҘдёӢжҳҜзҝ»иҜ‘з»“жһңпјҡжӯЈзЎ® - IEеңЁwindowе’ҢDOMе…ғзҙ дёҠеҗ‘JavascriptејҖж”ҫAPIпјҢдҪҶжҳҜиҝҷз§ҚжҡҙйңІжҳҜжңүйҷҗеҲ¶зҡ„пјҢйҖҡеёёдёҚиғҪеғҸеӨ„зҗҶвҖңзңҹжӯЈвҖқзҡ„Javascript组件дёҖж ·еӨ„зҗҶе®ғ们гҖӮ - Pointy
好点子,但这样不应该可以工作吗:var shell = function (method) { var fn = window[method]; fn.apply = Function.prototype.apply; fn.apply(null, Array.prototype.slice.call(arguments, 1)); }; shell('alert', 'monkey!'); - shawndumas
4
不行。问题在于window是一个宿主对象,而alert是宿主对象的属性。宿主对象不一定要像原生对象那样表现。以下问题与您的类似:http://stackoverflow.com/questions/3060318/js-proxy-pattern-problem - Tim Down
该死的IE。如果更好的方法失败了,我放弃了并使用了eval。 - shawndumas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接