码迷,mamicode.com
首页 > 移动开发 > 详细

【JavaScript】 call、apply重写bind方法

时间:2020-06-26 22:03:14      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:his   方式   script   nts   测试   括号   nbsp   on()   arguments   

        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】 call、apply重写bind方法

标签:his   方式   script   nts   测试   括号   nbsp   on()   arguments   

原文地址:https://www.cnblogs.com/arvin-LGQ/p/13196467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!