0
点赞
收藏
分享

微信扫一扫

手写call、apply、bind功能代码

倪雅各 2022-02-13 阅读 61

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()
举报

相关推荐

0 条评论