你不知道的JavaScript(this)

Posted dreamerjdw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你不知道的JavaScript(this)相关的知识,希望对你有一定的参考价值。

 

对this的常见误解

  this指向函数本身;

  this指向函数的词法作用域;

this是在运行时进行绑定的,并不是在编写时,它的上下文取决于函数调用时的条件。

this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。

function identify() {
  return this.name.toUpperCase();
}
function speak() {
  var greeting = “Hello, I’m” + identify.call(this);
  console.log(greetin);
}

var me = {
  name: “Kyle"
};

var you = {
  name: “Reader"
};

identify.call(me);
identify.call(you);

speak.call(me);
speak.call(you);

 

对象属性引用链中只有最顶层或者说最后一层会影响调用位置

function foo() {
  console.log(this.a);
}

var obj2 = {
  a: 42,
  foo: foo
};

var obj1 = {
  a: 2,
  obj2: obj2
};

obj1.obj2.foo(); // 42

 

判断this的顺序:

  ?函数是否在new中调用(new绑定)?如果是的话this绑定的是新创建的对象

    var bar = new foo()

  ?函数是否通过call、apply(显示绑定)或者硬绑定调用?如果是的话,this绑定的是指定的对象

    var bar = foo.call(obj2)

  ?函数是否在某个上下文对象中调用(隐式绑定)?如果是的话,this绑定的是那个上下文对象

    var bar = obj1.foo();

  ?如果都不是的话,使用默认绑定。严格模式下,绑定到undefined,否则绑定到全局对象。

 

以上是关于你不知道的JavaScript(this)的主要内容,如果未能解决你的问题,请参考以下文章

你不知道的JavaScript(this)

JavaScript中的this—你不知道的JavaScript上卷读书笔记

JS你不知道的JavaScript笔记- this - 四种绑定规则 - 绑定优先级 - 绑定例外 - 箭头函数

你不知道的JavaScript(上卷)小结

你不知道的javaScript笔记

读书笔记《你不知道的JavaScript(上卷)》——第二部分 this和对象原型