apply、call、bind

apply、call、bind的用法

apply

  • 参数一: 改变this的指向(不传参,默认指代当前环境的this)
  • 参数二: 数组,但是实际的话他会以...arguments呈现(也就是说会把数组转化为参数列表)['a','b','c'] => 'a','b','c'的形式

apply的妙用

  这些方法都只是接受param1,param2,param3apply方法可以默认把数组转化为这种形式

Array.prototype.push.apply(null,array);
Math.max.apply(null,array);
Math.max.apply(null,array),

call

  • 参数一: 改变this的指向(不传参,默认指代当前环境的this)
  • 参数二: (a,b,c)

bing

  • bind(this,’1’):  创建一个新函数,称为绑定函数
  • 参数一: 改变this的指向(不传参,默认指代当前环境的this)
  • 参数二: (a,b,c)

区别

相同点

  • 第一个参数都是this要指向的对象,也就是想指定的上下文;
  • 用来改变函数的this对象的指向的
  • 利用后续参数传参

异同点

  • bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用

example

function People(age, name) {
  this.name = name;
  this.age = age;
}
function Student(name, age, grade) {
  // People.apply(this,arguments);  
  // 这里使用apply就会导致赋值错误因为people对应的参数位置与student对应的参数位置不一致就会导致赋值错误
  // 这里应该使用call
  People.call(this, arguments[1], arguments[0]);
  this.grade = grade;
}
new Student("shenah", "18", 100);

 上一篇
class class
Class定义  ES6的class是一种语法糖 定义类 class类中方法以及构造器中没有逗号分隔 typeof Point => function 是函数 Point => Point.prototype.construc
2018-02-01
下一篇 
防抖与节流 防抖与节流
防抖与节流函数防抖(debounce)  当持续触发事件时,一定事件段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发事件,就重新开始延时 function debounce(fn, wait) { let
2018-01-20
  目录