JavaScript callapply重写bind方法

Posted arvin-lgq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript callapply重写bind方法相关的知识,希望对你有一定的参考价值。

        let obj = {
            age:26,
        }

        function Person(name, sex) {
            console.log(this);
            console.log(this.age);
            console.log(name, sex);
        }


        Function.prototype.bindToApply = function(context){
            let _self = this,
                _slice = Array.prototype.slice,
         tFun = function(){}; let args
= _slice.call(arguments, 1); let fn = function(){ let allArgs = _slice.call(arguments); _self.apply(this instanceof _self ? this : context, args.concat(allArgs)); } tFun.prototype = _self.prototype;
       fn.prototype = new tFun();
return fn; } // 测试一 // Person.bind(obj, "测试")("男"); // Person.bindToApply(obj, "测试")("男"); // 测试二 // let obj2 = Person.bindToApply(obj, "测试"); // new obj2(‘男‘); // let obj2 = Person.bind(obj, "张三"); // new obj2(‘男‘);

以上代码是用的apply重写的bind方法:call与apply的区别只在于传参方式不同 

call方法:Person.call(obj, "测试","男");
apply方法:Person.apply(obj, ["测试","男"]);
bind方法:Person.bind(obj, ["测试","男"])();
bind方法执行后 => Person.bind(obj, ["测试","男"]) 是返回的一个函数,而call与apply是直接返回结果的 所以bind方法后面是需要加上“()”执行括号的

 

tFun 

以上是关于JavaScript callapply重写bind方法的主要内容,如果未能解决你的问题,请参考以下文章

Javascript中callapply函数浅析

JavaScript实现callapply和bind

JavaScript之手撕callapply

JavaScript之手撕callapply

原生JavaScript实现callapply和bind

原生JavaScript实现callapply和bind