Apply 和 Call一样在 函数调用的时候会改变函数内的this指向,让this变成 Apply或Call的第一个参数。
举个例子:
var ObjEngineer = { name:'程序员努力的一天', age:19 }; function fn2() { console.log(this.name); } fn2.Apply(ObjEngineer ) 输出: 程序员努力的一天
是不是感觉 this.name 的值被 ObjEnginner中的 name给覆盖了呢,就是的。
解刨一下原理:
自定一个 myCall吧,把 myCall 挂载到 Function上,这样每个函数都可以使用myCall
Function.prototype.myCall = function(context){ context.fn = this; //这里的this是指谁调用 myCall 就指向谁,比如: b.myCall ,这个 this 就指向 b context.fn(); delete context.fn; }
上面代码是先给context对象添加一个 fn的函数,把外面调用 myCall的函数传给 fn, 当 fn() 执行完之后就可以把他删除掉了不用了。
标签:name,理解,context,Apply,myCall,fn,函数 From: https://www.cnblogs.com/youmingkuang/p/16745448.html