私は John Resig の Secrets of Javascript ninja を読んでいて、カリー化と部分関数の例の 1 つを試していました。コードは次のとおりです。
<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 the apply function というエラーを生成するようです。
それはすべて理にかなっているように見えるので、理由を理解できないようです。
関数コンテキスト ( ) として関数をbindClick
呼び出す無名関数を返し、引数は次のようになります。elem.addEventListener
window
this
["click", function() {console.log("OK"); }]