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

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

 

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

 

 

 

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!(待完成)

上一篇:Dapper 返回Sql server 自增长ID 标识列SCOPE_IDENTITY


下一篇:手机—— “精神糖(Psycho Candy)”