【发布时间】:2013-03-24 20:14:56
【问题描述】:
我正在通过在线阅读和编写一些简单的代码来学习 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
然后我尝试在实例化函数的方法上进行尝试。所以我试着跟随。但它在倒数第二行给了我错误“无法获取未定义或空引用的属性'原型'”。我知道这个错误与柯里化无关,但我搞砸了 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());
【问题讨论】:
-
personObj没有属性ageAfter。只有Person有。我认为您的意思是将ageAfter分配给Person.prototype.ageAfter,以便每个Person实例都继承该函数。 -
@FelixKling 我认为这是一个转录错误,但您可能是对的,这是直接的问题。
-
@Pointy:这是我认为的问题之一。提到的错误消息““无法获取未定义或空引用的属性'原型'”支持这一点。
-
这是我提到的问题之一。
-
我想提一下,这不是正确的柯里化;这是部分应用。见:stackoverflow.com/questions/218025/…
标签: javascript function partial-application