オンラインで読んだり、簡単なコードを書いたりして、JavaScriptで関数カリー化を学んでいます。オンライン記事で次の例を取得しました
function toArray(obj) {
return Array.prototype.slice.call(obj);
}
Function.prototype.curry = function() {
if (arguments.length<1) {
return this; //nothing to curry with - return function
}
var __method = this;
var args = toArray(arguments);
return function() {
return __method.apply(this, args.concat(toArray(arguments)));
}
}
var add = function(a,b) {
return a + b;
}
var addTen = add.curry(10); //create function that returns 10 + argument
alert(addTen(20)); //alerts 30 correctly
次に、インスタンス化された関数のメソッドで試してみました。だから私はフォローしてみました。しかし、最後から2行目に「未定義またはnull参照のプロパティ「プロトタイプ」を取得できません」というエラーが表示されました。このエラーはカリー化とは何の関係もないことは知っていますが、JS関数の概念のいくつかの基本を台無しにしています。だから私が間違っているところ。
function Person()
{
this.age = 15;
}
Person.ageAfter = function (years) {
return this.age + years;
}
var personObj = new Person();
var ageAfterFiveYears = personObj.ageAfter.prototype.curry(5); //**Error**
alert(ageAfterFiveYears());