还有你不知道的 call apply bind

66 阅读2分钟

js指向.png 首先我们先说一下,js中环境对象this,提到this我们就该说说一下this指向问题,在全局作用域中this的指向就指向浏览器的顶级对象window,在全局函数中this也指向window,箭头函数没有this它是沿用上级作用域的this

image.png this指向在我们日常经常使用,在构造函数中我们定义公共的属性就可以用this指向定义,构造函数的this就指向我们的实例化对象

image.png 最早我们用this指向可以做很多事情,原型链方法上方法的调用,例如最早的我们用来检测typeof只能检测基本数组类型,引用数据类型全部都是Object,万物皆对象,没办法检测精准的数据类型,可以用原型链顶端Object上的tostring方法检测,利用了这个方法封装一个函数精准的检测类型。

image.png 这里就是利用了call 改变Object 原型对象上的tosting方法指向方法然后进行slice进行加工。这里就可以看出改变this指向的作用,但现在这种已经不用了。

R-C.jpg 这时候我们就可以数到改变this指向的几种方法(call apply bind),

1.首先说说一下语法的区别 call 的传参跟apply传参不同,call传入的是一个字符,apply传入的是一个数组,call跟find传入的参数类型是一样的

2.再说一下返回值 bind 返回一个修改过this指向后的函数,可以由自己决定是否调用,call和apply他们没有返回值。

3.call和apply在函数调用这个方法时会先执行一次函数,然后再修改this指向。

image.png