纠结的函数调用
今天看到一段代码,把call和apply一起调用,让我琢磨的大半天:
function Foo() {} Foo.prototype.method = function(a, b, c) { console.log(this, a, b, c); }; // Create an unbound version of "method" // 输入参数为: this, arg1, arg2...argN Foo.method2 = function() { // 结果: Foo.prototype.method.call(this, arg1, arg2... argN) Function.call.apply(Foo.prototype.method, arguments); }; //上面的Foo.method2 等效于下面的代码: Foo.method2 = function() { var args = Array.prototype.slice.call(arguments); Foo.prototype.method.apply(args[0], args.slice(1)); }; //example: Foo.method2({"a":33},1,2,3) // output: Object { a=33} 1 2 3 // 可以看到: this指向了 对象 {"a":33},而剩下的参数正好传递给method了。 结论: 1. apply方法,会自动把arguments这个伪数组,解构,传递给 call方法。 2. 我们知道,call的调用方法是:fn.call(obj,args1,args2,...),而 Foo.prototype.method 将会利用call方法得到执行。 3.传递给 Foo.method2 的 arguments[0],相当于call参数的 obj,而 arguments的后续参数,将逐个按次序,传递给 Foo.prototype.method
相关推荐
wangzhaotongalex 2020-09-22
古叶峰 2020-11-16
linmufeng 2020-09-08
xiaoxiaokeke 2020-07-28
好好学习天天 2020-07-21
83417807 2020-07-19
小方哥哥 2020-07-09
wbczyh 2020-07-05
pwc 2020-06-26
flowerCSDN 2020-06-16
Wonder的学习 2020-06-13
周小董 2020-06-10
luvhl 2020-06-08
nurvnurv 2020-06-05
Andrewjdw 2020-05-27
米虚 2020-05-19
专注前端开发 2020-03-01