0
点赞
收藏
分享

微信扫一扫

手写js中的call 方法(原理分析)

云卷云舒xj 2022-04-03 阅读 84

我们通常使用call 来 修改某个对象的指向,但是你了解其中的原理吗?

1.首先所有构造函数都能使用,说明什么?

其实call 本身是构造函数原型上的一个方法 即(Function.prototype上的方法)

2.为什么能使用传入的对象中的属性呢?

实则是在传入的对象中,又声明了此构造函数(函数),则构造函数中就能使用此对象中的属性啦

明白了这两点,我们就开始实现咯,上代码!

Function.prototype.newCall =function(obj,...args){

    // this 实则就是 构造函数(函数)本身,把其构造函数,添加到这个对象身上
    obj.getName =this


    //  执行此对象身上,所对应的构造函数,并把值传给他
    obj.getName(...args)


    // 之后呢,因为我们手动修改添加了属性,到最好使用完了,同样也要删除,不能改变原来的对象
    delete obj.getName

    return
}

var a ={
    name:'啦啦啦'
}

function A(age,sex){
   console.log(age)
   console.log(sex)
    console.log(this.name)
}
A.newCall(a,12,'男')  //  12,'男','啦啦啦'

总结: 实际上,就是在对象中,添加了此函数,然后执行了此函数,所以函数才能拿到对象中的属性或者方法咯

举报

相关推荐

0 条评论