call

作者: 湘兰沅芷 | 来源:发表于2022-12-24 21:09 被阅读0次
    function Person(name, price) {
        this.name = name;
        this.price = price;
        this.msg = function() {
            console.log('我叫' + this.name)
        }
    }
    Function.prototype.myCall = function (thisArg = globalThis, ...arg) {
        const key = Symbol()
        thisArg[key] = this
        console.log(this)
        thisArg[key](...arg)
        delete thisArg[key]
        console.log(thisArg)
        return thisArg
    }
    let arg = {
        sex: 'nan',
        age: 20
    }
    console.log(Person.myCall(arg, 'test', '1000'))
    

    apply

    // 向原型添加一个方法 使所有的函数都可以用此方法
    // thisArg(需要被添加属性或方法的对象)...arg(接受的参数)
    Function.prototype.myApply = function (thisArg, arg) {
        // 如果thisArg不是很法值就返回对应环境的全局 如Window 
        if (!thisArg) {
            thisArg = globalThis
        }
        arg= arg? arg: []
        //添加一个独一无二的值 以免thisArg里面有一样名字的属性会被覆盖掉
        const key = Symbol()
        //这个this指向他的调用者this为asg 调用myCall的函数里面的this会变成thisArg
        thisArg[key] = this
        // 将函数里面的形参赋值
        thisArg[key](...arg)
        // 删除多余都属性
        delete thisArg[key]
        //apply的返回值是undefined
        return thisArg
    }
    
    console.log(Person.myApply(arg, ['祁纤', '10000']))
    

    相关文章

      网友评论

          本文标题:call

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