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

手撸JS call,apply,bind

时间:2020-05-25 19:10:47      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:col   call   ack   code   属性   ice   职业   对象   text   

call的实现

    Function.prototype.Call=function(...args){
            var context=args[0]||window;
            var argArr=args.slice(1)
            context.fn=this;  //相当于给context加了一个fn属性,属性值为当前函数,在对象里面定义函数相当于把函数的this改为context对象了
            var result=context.fn(...argArr)
            delete context.fn
            return result;
    }
    var obj = {
        name: "hty",
        sex: "男"
    }
    function fn(age, pro) {
        console.log(`${this.name}是${this.sex}`)//hty是男
        console.log(`今年${age}职业是${pro}`)//今年24职业是前端攻城狮
    }
    fn.Call(obj, "24", "前端攻城狮")

apply的实现

    Function.prototype.Apply=function(...args){
            var context=args[0]||window;
            var argArr=args.slice(1)
            context.fn=this;
            var result=context.fn(...argArr[0])
            delete context.fn
            return result;
    }
    var obj = {
        name: "hty",
        sex: "男"
    }
    function fn(age, pro) {
        console.log(`${this.name}是${this.sex}`)//hty是男
        console.log(`今年${age}职业是${pro}`)//今年24职业是前端攻城狮
    }
    fn.Apply(obj,["24", "前端攻城狮"])

bind的实现

    Function.prototype.Bind=function(...args){
            var context=args[0]||window;
            var args=args.slice(1)
            var fbind=this;
            fBound=function(...value){   //bind要返回函数
                fbind.apply(context,args.concat(value))
            }
            return fBound
    }
    var obj = {
        name: "hty",
        sex: "男"
    }
    function fn(age, pro,type) {
        console.log(`${this.name}是${this.sex}`)//hty是男
        console.log(`今年${age}职业是${pro}他在${type}`)//今年24职业是前端攻城狮他在努力
    }
    fn.bind(obj,"24", "前端攻城狮")("努力")

 

手撸JS call,apply,bind

标签:col   call   ack   code   属性   ice   职业   对象   text   

原文地址:https://www.cnblogs.com/apple78/p/12958330.html

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