2020-10-29

bind call apply 的区分和各自的特点

一.apply的作用及用法.调用函数的方法就不展示了
作用:1.可以调用函数
2.改变函数内部的this指向
3.apply的主要一个应用是:可以借用Math内置对象
4.apply的第二个参数必须是数组

//  例如求数组中的最大值或者最小值...
//以往的做法用循环遍历 很啰嗦
//现在做法:
const arr=[96,5,21,79,3]
const max=Math.max.apply(Math,arr)
console.log(max)  //  96  
//分析:1.Math.max.apply代表通过apply来借用Math.max这个方法
// 2.(Math,arr)括号里的第一个参数代表this的指向,也可以是null,但是如果配上严格模式的话可能会报错,所以就写成Math本身就行
// 3.apply会把arr拆分成96,5,21,79,3这样的number类型进行比较

二.bind方法
作用:1.也可以改变原来函数this指向 但是不能调用函数
2.但是有返回值,返回值是以改变this指向的新函数
3.其实bind的应用场景还是比较多的,当这个函数不会立即调用,但又想改变函数的内部this指向。例如定时器来控制按钮的禁用与开启的案例

const oldFn={
	uname:"zs"
}
// 创建一个函数
function Fn(){
	console.log(this)
}
fn.bind(oldFn)  //切记不会调用函数,但是会生成一个改变this指向之后的新函数
const newFn=fn.bind(oldFn)  
newFn()

三.call的用法及作用
作用: 1.改变this指向
2.可以调用函数
3.可以借用方法

// 改变this指向和调用函数的方法和apply都大同小异,但是call的参数可以是多个,而apply第二个参数时数组
//  我们主要来写一下call借用方法的作用
//  例如当我们面试的时候,遇到怎么检测数据类型,除了typeof intanceof 还有一个方法就是call方法

const  arr=[];
const obj={};
// Object.prototype.toString的方法 这个方法可以检测数据类型
console.log(obj.toString())  // 打印 [object,Object]
// 现在数组也可以借用 Object.prototype.toString的方法
console.log(Object.prototype.toString.call(arr))  //打印  [object,Array]
console.log(Object.prototype.prototype.toString.call(null)) //打印  [object,null]
// 此时我们就可以通过switch case来进行判断
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页