关于this
在JS中,this总是指向一个对象。
this的指向是在运行函数时动态绑定的。
使用this的四种情况
对象方法
当函数作为对象的方法被调用时,this指向该对象。
普通函数
在普通函数中使用时,this总是指向全局对象(在JS中,全局对象是window)。
有一种特殊情况,比如在某节点的事件函数内部,有一个局部的方法,当这个方法被当做普通函数调用时,其内部的this指向的是window,但我们往往希望它指向该节点。
最为常用的解决方法是,用一个变量将指向节点的this保存起来。
在ES5的strict模式下,这种情况下的this 经被规定为不会指向全局对象,而是 undefined。
构造函数
当函数作为构造函数调用时,this指代new出的对象。
构造函数的外表跟普通函数一模一样,它们的区别在于被调用的方式。当用new运算符调用函数时,该函数总会返回一个对象,通常情况下,构造器里的this就指向返回的这个对象。
由于react组件化的思想,构造函数在react中的应用十分广泛。
需要注意的是,如果构造函数显式地返回了一个object类型的对象,那么此次运算结果最终会返回这个对象,而不是我们之前期待的this:
如果构造器不显式地返回任何数据,或者是返回一个非对象类型的数据,就不会造成上述问题:
Function.prototype.call或Function.prototype.apply
用上述两种方法,可以动态改变传入函数的this,即改变this的指向。call和apply很好地体现了JS函数式语言的特性,它们也出现在很多设计模式中。