首页 > 代码库 > js学习总结----call方法深入
js学习总结----call方法深入
var obj = {name:"张三"} function fn(){ console.log(this) } fn(); obj.fn(); // obj.fn is not a function fn.call(obj) //首先我们让原型上的call方法执行,在执行call方法的时候,我们让fn方法中的this变为第一个参数值obj;然后再把fn这个函数执行.
//自己模拟内置的call方法,写一个myCall方法,深入探讨call原理 Function.prototype.myCall = function(context){ /* myCall方法中的this就是当前我要操作和改变其this关键字的那个函数名 让this这个函数中的"this关键字"变成context */ //1、让fn中的this关键字变为context的值->obj eval(this.toString().replace(‘this‘,context)) //2、让fn方法执行 this(); } fn.myCall(obj);
//首先fn1通过原型链机制找到Function.prototype上的call方法,并且让call()方法执行->此时call这个方法中的this就是我要操作的fn1,在call方法代码执行过程中首先让fn1中的"this关键字"变成fn2,然后在让这个方法执行->1 fn1.call.call(fn2) /* 首先fn1通过原型链机制找到Function.prototype上的call方法,然后在让call方法通过原型在找到Function原型上的call(因为call本身的值也是一个函数,所以同样可以找到Function.prototype),在第二次找到call的时候让方法执行,方法中的this是fn1.call,然后让这个方法中的this变成fn2,最后fn1.call执行->2 */
js学习总结----call方法深入
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。