1 默认绑定
函数在一般调用时执行环境时window,所有this指向window
function fn(){ console.log(this) } fn()
2 立即执行函数的this默认指向window
var name = 'wbb' !(function () { alert(this.name) })()
3 闭包得this指向window
var name = 'wbb' function f() { var name = 'wcm' return function () { alert(this.name) } } f()()
4 函数作为某个对象的方法执行时,this指向直接对象。
var obj = { name: 'test', f: f1 } function f1() { alert(this.name) } obj.f()
5 隐式丢失
1 函数当作某个对象得方式执行赋值给另一个变量,此时this指向window
var obj = { name: 'test', f: f1 } function f1() { alert(this.name) } var func = obj.f func()
2 参数传递(对象中的方法当作参数传递)
6 内置函数
比如settimout, setinterval,第一个参数函数的this指向window
function f1() { var name = 'xxx' setTimeout(function () { alert(this.name) }, 1000) console.log(this) } // var obj1 = obj.f f1()
7 间接调用n
1 数组中 forEach(fn, obj)来改变fn中this的指向,不传默认指向window
var obj = { name: 'test' } var arr = [1,2] arr.forEach(function (v) { alert(this.name) }, obj)
8 构造函数 (通过new关键字)
函数内部的this指向当前实例对象
function Person(name) { this.name = name console.log(this.name) } var person = new Person('wbb')