美文网首页
javascript中call函数的原理、手写call函数

javascript中call函数的原理、手写call函数

作者: k_zone | 来源:发表于2020-07-01 17:11 被阅读0次

call 函数是用来改变调用者的this指针:

function f() {
    console.log(this)
}
f()     // window
let obj = { a: 1 }
f.call(obj)      // { a: 1 }

f.call(obj) 的原理就是把f函数挂载到obj上,执行obj.f()的时候,f中的this就指向了obj。根据这个原理, 我们可以来实现自己的 myCall 函数 :

Function.prototype.myCall = function (obj) {
    var obj = obj ? Object(obj) : window      // obj可能不是一个对象 所以用Object()包裹下
    obj.fn = this       // 当执行 f.myCall() 时, myCall()里的 this 指向 f
    var arg = [...arguments].slice(1)     //取出除了obj以外的其他参数
    var result = obj.fn(...arg)
    return result
}

其中比较难理解的就是 obj.fn = this, 这行代码的意思就是把f.call(obj) 中的f函数挂载到obj上。当执行f.myCall() 时, myCall里的 this 指向 调用者f,所以这里的this就是f函数。

相关文章

网友评论

      本文标题:javascript中call函数的原理、手写call函数

      本文链接:https://www.haomeiwen.com/subject/lhchqktx.html