我正在阅读 John Resig 的 Javascript ninja 的秘密,并尝试了其中一个关于 currying 和 parital 函数的示例。代码如下:
<html>
<body>
<button id="test">Click Me!</button>
</body>
<script type="text/javascript">
Function.prototype.curry = function() {
var fn = this,
args = Array.prototype.slice.call(arguments);
return function() {
return fn.apply(this, args.concat(
Array.prototype.slice.call(arguments)));
};
};
var elem = document.getElementById("test");
var bindClick = elem.addEventListener.curry("click");
bindClick(function(){ console.log("OK"); });
</script>
</html>
但是,以下代码似乎会生成错误 Uncaught TypeError: Illegal invocation on apply 函数。
我似乎无法弄清楚原因,因为这一切似乎都是有道理的。
将返回一个匿名函数,该函数使用函数上下文 ( )bindClick
调用该函数,并且参数将是elem.addEventListener
window
this
["click", function() {console.log("OK"); }]