核心提示:首先说明两个方法的含义:apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。call:调用一个对象的一个方法,用另...
首先说明两个方法的含义:
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);