首页 > 移动平台 > 详细

一起手写吧!call、apply、bind!(待完成)

时间:2020-04-18 17:36:18      阅读:51      评论:0      收藏:0      [点我收藏+]

apply,call,bind都是js给函数内置的一些api,调用他们可以为函数指定this的执行,同时也可以传参。

call

call 接收多个参数,第一个为函数上下文也就是this,后边参数为函数本身的参数。

let obj = {
    name: "一个"
}

function allName(firstName, lastName) {
    console.log(this)
    console.log(`我的全名是“${firstName}${this.name}${lastName}”`)
}
// 很明显此时allName函数是没有name属性的
allName(‘我是‘, ‘前端‘) //我的全名是“我是前端”  this指向window
allName.call(obj, ‘我是‘, ‘前端‘) //我的全名是“我是一个前端” this指向obj

 

技术分享图片

 

 

 

apply

apply接收两个参数,第一个参数为函数上下文this,第二个参数为函数参数只不过是通过一个数组的形式传入的。

allName.apply(obj, [‘我是‘, ‘前端‘])//我的全名是“我是一个前端” this指向obj

bind

bind 接收多个参数,第一个是bind返回值返回值是一个函数上下文的this,不会立即执行。

        let obj = {
            name: "一个"
        }

        function allName(firstName, lastName, flag) {
            console.log(this)
            console.log(`我的全名是"${firstName}${this.name}${lastName}"我的座右铭是"${flag}"`)
        }
        allName.bind(obj) //不会执行
        let fn = allName.bind(obj)
        fn(‘我是‘, ‘前端‘, ‘好好学习天天向上‘)

        // 也可以这样用,参数可以分开传。bind后的函数参数默认排列在原函数参数后边
        fn = allName.bind(obj, "你是")
        fn(‘前端‘, ‘好好学习天天向上‘)

 

实现call

1.call主要都做了些什么。

  • 更改this指向
  • 函数立刻执行

 

一起手写吧!call、apply、bind!(待完成)

原文:https://www.cnblogs.com/magicg/p/12726831.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!