您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

this、call、apply、bind

this的指向

  1. 作为普通函数(也指对象的方法)进行使用,谁去调用该函数,那么this便会指向谁。
  2. 作为构造函数使用,指向该构造函数的实例。
  3. 在箭头函数内部的使用,指向上一级函数的this;若上一级不是函数,那么会指向全局。
  4. 通过call、apply进行更改,将this指向更改为其方法内部的第一个参数。

call和apply

二者的第一个参数更改为使用者,使用的是外部调用call的函数的方法。

// 例子
猫.吃鱼.call(狗)

这样狗就获得猫吃鱼的方法。
从第二个参数开始。
call能够传入多个参数。
apply传入的是多个参数组成的数组。

bind

  1. 和call、apply一样第一个参数能够更改this指向。
  2. 不同的是它传回的是一个函数,这个函数有一个特点,它固定了参数,而这些参数是从bind绑定时传入的第二个参数顺序算下去的。
// 例子
function fn(a, b, c) {
  return a + b + c;
}

var _fn = fn.bind(null, 10); // 这里就获得一个新的函数
var ans = _fn(20, 30, 40); // 60,如果我们使用fn(20,30,40)结果应该是90的
// 正是因为bind的时候将a固定为了10,20传入的是b,30传入的是b,而40并没有用到。
  1. bind的参数和call一样,从第二个参数开始能够传入多个参数,而不是一个数组。
  2. 从2知它传回的是一个函数,这个函数可以当成构造函数使用,但此时this的指向更正为该构造函数的实例,而不是bind绑定时的指向。
function Person(name, age) {
  this.name = name;
  this.age = age;
}

var _Person = Person.bind({});
var p = new _Person('hanzichi', 30); // Person {name: "hanzichi", age: 30}

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进