手写call、apply、bind功能代码

call:函数.call(对象,参数) 将函数中的this指向对象,并且直接执行函数,参数要一一传递

  function demo(){
            console.log(this);
        }

        var obj = {
            name:'1',
            age:2,
            // fn: demo;
        }
Function.prototype.mycall = function(){
    var fn = arguments[0]||window;
    var target = Array.from(arguments).slice(1);
    fn.add= this;
    fn.add(...target);
}
demo.mycall(obj)
demo.call(obj)

apply:函数.apply(对象,数组) 将函数中的this指向对象,并且直接执行函数,参数以数组的形式传递

 function demo(){
            console.log(this);
        }

        var obj = {
            name:'1',
            age:2,
            // fn: demo;
        }
Function.prototype.myapply  = function(){
    var target = arguments[0]||window;
    var fn = arguments[1];
    target.add =this;
    target.add(...fn)
}
demo.myapply(obj,[1,2])
demo.apply(obj,[1,2 ])

bind:函数.bind(对象,参数) 返回一个新函数,将新函数中的this指向对象

function demo(){
            console.log(this);
        }

        var obj = {
            name:'1',
            age:2,
            // fn: demo;
        }
Function.prototype.mybind = function(){
    var target = arguments[0]||window;
    var add = Array.from(arguments).slice(1);
    var ty =this;
    return function(){
        var arg = Array.from(arguments);
        target.fn = ty;
        target.fn(...(add.concat(arg)))
    }
}
var cc = demo.mybind(obj);
cc()
var aa = demo.bind(obj);
aa()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值