call.apply连用可以怎么样理解?

泻药就是最原始的 call (函数) 的 call (调用) 啊如:function foo(a) { this.x = a; console.log(this, a, this.x);}Function.prototype.call.apply(foo , );// output// Object {x: 1} 1 1Function.prototype.call.call(foo , {}, 1);// output// Object {x: 1} 1 1反正 call 和 applay 的第一个参数必须是规范定的 IsCallable ,也就是实现了 ] 的 Object。ps:这个不看规范不用管啦,其实第一个参数必须是 function个人认为,这么做估计是怕 call 啥被同名成员属性盖掉导致出错什么的吧。因为 function 就是个可以 ] 的 Object 。保不齐有人这么玩吧……function foo(a) { this.x = a; console.log(this, a, this.x);}foo.call = function(){ throw \u0026#39;err!\u0026#39;};foo.call({}, 1);// output// 异常 err!通常说 Function.prototype.call 要是给改掉那就可以胖揍肇事者了 ……所以呢,Function.prototype.call 就是原始 call 函数的“保险”调用然而Array.prototype.slice.call.apply 也是类似,就是没走到 Function.prototype.call 这么深的根上……也可能会被指定性的加入同名成员属性盖掉:Array.prototype.slice.call = function(){ throw \u0026#39;err!\u0026#39;};Array.prototype.slice.call.apply(foo, );// output// 异常 err!虽说这么干的人也可以拖过来弹JJ ……
■网友
遇到 call 或 apply,自动把前面的打包看成一个值。Function.prototype.call.apply = \u0026gt; (Function.prototype.call).apply或者先缓存到一个变量中var call = Function.prototype.callcall.apply(...)这里还有个反柯里化玩法function unCurrying(fn) {\t\treturn function() {\t\t\treturn Function.prototype.call.apply(fn, arguments)\t\t}\t}返回一个新函数,旧函数的this值被抽出来,作为新函数的首个参数。


    推荐阅读