首先说明两个方法的含义:
apply: 调用一个对象的一个方法, 用另一个对象替换当前对象例如: B.apply(A, arguments); 即 A 对象应用 B 对象的方法 call: 调用一个对象的一个方法, 用另一个对象替换当前对象例如: B.call(A, args1,args2); 即 A 对象调用 B 对象的方法
call 与 apply 的相同点:
方法的含义是一样的, 即方法功能是一样的; 第一个参数的作用是一样的;
call 与 apply 的不同点: 两者传入的列表形式不一样
call 可以传入多个参数; apply 只能传入两个参数, 所以其第二个参数往往是作为数组形式传入
存在的意义: 实现 (多重) 继承
详情请看大神的详解: 点击打开链接
插入两段代码, 大家练练手:
- var scopeTest = (function(){ // 考察了 this 的含义
- window.a=2;
- function fn(b){
- this.b = b;
- console.log(this.a);
- }
- var obj = {a:4,fn:fn};
- fn();
- obj.fn();
- fn.call(obj);fn.call(null);
- fn.apply(obj);fn.apply(null);
- var fninstance = new fn(8);
- console.log(fninstance.b);
- })();
- function fruits() {}
- fruits.prototype = {
- color:"red",
- say: function() {console.log(this.color);}
- }
- var apple = new fruits();
- apple.say();
- var banana = {color:"yellow"};
- apple.say.call(banana);
- apple.say.apply(banana);
来源: https://www.2cto.com/kf/201803/732291.html