规则1:使用new后this指向new创建的对象
规则2:使用call 或者apply this指向你传入的对象(传入的对象不能为null、undefined 不然指向window)
规则3: this指向 函数最后被调用位置
规则4:默认: this指向全局(window)对象 严格模式下指向undefined
方法/步骤
-
//规则1:使用new后this指向new创建的对象
function __new() {
this.a = "测试"
console.log(this)
}
var a = new __new()
//执行结果如下图
-
//规则2:使用call 或者apply this指向你传入的对象(传入的对象不能为null、undefined 不然指向window)
function aa() {
console.log(this)
console.log(this.a)
}
var b = {
a: '我是b对象'
}
aa.call(b)//aa.apply(b)
//执行结果如下图
-
//规则3 :this指向 函数最后被调用位置
//例子1
function a(x) {
console.log(this)
console.log(this === x)
}
var b = {
c: a
}
b.c(b) //可理解为a在b中被调用执行了,调用的位置是在b,this指向b
var win = b.c //注意这里是js引用赋值。this指向(全局)window对象
win(b)
//执行效果如下图
-
//规则3:this指向 函数最后被调用位置
//例子2
var c = {
dd: {
a:function(x) {
console.log(this === x)
}
}
}
c.dd.a(c)
c.dd.a(c.dd) //这才是真正的调用位置
//执行效果如下图
-
//默认
function aa() {
function bb(){
console.log(this)
console.log(this === window)
}
bb()
}
aa()
/*下面也是如此*/
function aa() {
bb()
}
function bb(){
console.log(this)
console.log(this === window)
}
aa()
//执行效果如下