this的指向只有在调用的时候才能确定,即this永远指向最后调用它的那个对象。

# 改变this指向

  • call
// 用法
Fun.call(this,arg1,arg2,arg3...)

继承

function Person(name) {
  this.name = name
}

function Student(name, id) {
    // 继承了父亲的name属性
  Person.call(this, name)
  this.id = id
}

let s1 = new Student('susan', 110)
console.log(s1) // {name: 'susan', id: 110}

指定上下文的this

let name = 'lily'
function f1() {
  console.log(this.name)
}

function f2() {
  return {
      name: 'susan'
  }
}

f1.call(f2()) // 打印出susan
  • apply:同call,只是传参方式为数组而不是列表。
Fun.apply(this, [arg1, arg2...])
  • bind
var sum = function(a, b) {
  return a + b;
};

var add5 = sum.bind(null, 5);
console.log(add5(10));
# 参考资料

javascript this

call用法

apply用法

bind用法

bind stack overflow