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')
京公网安备 11010502036488号