(1)直接调用(默认绑定)
this == window
注:在严格模式下此时的this指代undefined
(2)隐式绑定(对象.方法())
this指代调用方法的那个对象
(3)显示绑定(call、apply、bind)
this指代 第一个的参数的对象
注:call和apply临时性的只作用于这一次,bind永远绑定方法中的this,返回值就是绑定成功后的函数,但对原来的那个函数没有任何影响,并且使用bind绑定后的函数再使用call和apply也不会改变this的指向,也就是说bind的优先级高于call和apply。
(4)new绑定
this指代将来要创建的那个对象
注:显示绑定的优先级最高,但是call和apply传入的第一个参数是null和undefined,this的绑定会丢失,this会变成window,如果第一个参数是基本类型(除null和undefined外),会先把基本类型包装转换成相应的对象类型。例如数字1包装转换为new Number(1);