0
回答
如何理解javascript反科里化中的call.apply()
华为云实践训练营,热门技术免费实践!>>>   

JavaScript反科里化的一种写法如下:

Function.prototype.uncurryThis = function () {
    var f = this;
    return function () {
        return f.call.apply(f, arguments)
    };
};

假如这样调用:

Array.forEach = Array.prototype.forEach.uncurryThis();

Array.forEach(["first", "second", "third"], function(ele, index){
	console.log(index + " ==> " + ele);
});

在uncurryThis方法中,f = this = Array.prototype.forEach,而f.call.apply(f, arguments)就可以转化为:

(Array.prototype.forEach.call).apply(Array.prototype.forEach, arguments);

apply方法用Array.prototype.forEach来替换(Array.prototype.forEach.call)中的this,该this是Array.prototype.forEach,所以最终执行的应该是:

Array.prototype.forEach.call(arguments);

此时的arguments为:


按照call方法的执行,arguments应该是替换掉Array.prototype.forEach 的this,即执行 

arguments.forEach();

这样显然是不对的,不知道uncurryThis函数怎么执行出的结果?

我模拟了最后的执行程序:

function testForEachFunc(){
	console.log(arguments);
	Array.prototype.forEach.call(arguments);
}

testForEachFunc(["first", "second", "third"], function(elem, index){
	console.log(index + "---->" + elem); 
});

在call执行的时候,浏览器报错:Uncaught TypeError: undefined is not a function

我想问一下,以上的理解错在什么地方?应该怎么去理解?





<无标签>
举报
facesea
发帖于2年前 0回/188阅
顶部