作为对象方法调用
- this作为对象的属性调用时,this指向该对象
- this作为对象的属性被赋值给一个新的变量时,this指向window
var obj = { x: "li", fortuneteller: function() { console.log(this); } } obj.fortuneteller() //指向obj var y = obj.fortuneteller y() //window
作为构造函数调用
- 当函数作为构造函数调用时,this代表new出来的对象;
- 如果没有使用new而是直接调用函数,this===window;
function person() { this.name = "Fortuneteller", console.log(this); } var man = new person() //person person()//window
作为普通函数
function fn() { return this } console.log(fn());//window
通过call(),apply().bind()改变this指向,this指向是传入的对象
共同点:都是改变函数的this指向问题
不同点:
- function.call(this,对象,对象...)
- function.apply(this,[对象,对象])
- var ss=function.bind(this,对象,对象...)
- call apply直接执行 bind没立即执行,函数再执行一遍