来谈谈call,apply,bind吧,再加上点this指向也不错

首先呢,毕竟这个问题老生常谈了,我写的也不一定比别人写的好,但是只是自己的一些理解,会说的尽量通俗易懂一些。

来随便谈一谈吧,这三个东西,面试十家公司,会有九家问,这个是什么意思,干什么用的,有啥区别,别和他废话,简明扼要,全部用来改变this指向,区别在于bind不会执行,apply和call参数不同,仅此而已。那么问题来了,为什么要改变this指向呢,this指向个啥,嘿嘿嘿,那就再写写this吧
this呢 说白了就是找(qi)大(mo)佬(ji)
首先来说说 正常情况下 是全局 浏览器下 是window 严格模式下就是undefined,来段代码吧

function consolethis() {
    console.log(this)
}
function consolestrictthis() {
    'use strict'
    console.log(this)
}
consolethis();//window
consolestrictthis();//undefined

再来谈谈调用 简单的来说呢 谁调用,this就指向谁。这些呢是基本的this,
再者的话就是箭头函数的this,这个货终于老实了,它就是定义时所在的对象
构造函数的this,就指向它的实例对象,好 简答了解下this即可。
在这里插入图片描述

function father(name,age) {
    this.name = name;
    this.age = age;
}
function person(name,age,sex) {
    father.apply(this,arguments)//father.call(this,name,age)或 father.bind(this)(name,age)
    this.sex = sex
}
var person = new person(1,2,3)
console.log(person)

一个简单的小栗子,实现一个继承,其实已经很明白了
call 和 apply 都是把father的函数体内部的this换成当前this,然后去执行走一圈,也就是相当于去执行一次函数。
然后bind的话其实是创建了一个新函数,如果不立即调用,那么不生效,如果调用,后面传参即可
再来看看妙用

记得有一道题是这样的 伪数组怎么转换成数组,如果是你你会怎么做呢,来直接看简单的吧

Array.prototype.slice.call(arguments)

来解读一下这段代码的意思 把arguments伪数组调用Array。prototype.slice方法并改变this指向,然后把所有元素截出来,完成转换伪数组,也就相当于是伪数组调用了数组的截取方法,并且截取了所有的元素,当然,这三个方法的用处绝对不止这些,也要适当的考虑用处,例如react组件中的方法使用bind供人调用,等等等,不一一举例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值