this的指向问题:
首先:
1.this永远指向某个对象
2.this的指向取决于调用他的对象
其次:this的几种种情况
1.在全局作用域中或普通函数中默认指向window(全局对象)
2.事件中,函数内部的this指向事件源
3.对象方法调用时,this指向调用对象
1.在全局作用域中或普通函数中默认指向window(全局对象)
console.log(this)//window
function a(){
console.log(this)
}
a()//winodw
2.事件中,函数内部的this指向事件源
<div style="width: 200px; height: 200px; background: #0000FF;" id="box">
box.onclick = function(){
console.log(this)
}//box标签
3.对象方法调用时,this指向调用对象
在使用过程中 这点遇见众多问题,讲下我的理解
var fn = {
user:"冰冻黑熊",
fn1:function(){
console.log(this.user); //冰冻黑熊
}
}
fn.fn1();
window.fn.fn1();//冰冻黑熊
this指向fn,因为fn1函数通过fn来调用指向,所以This指向fn 即可调用user
window.fn.fn1(),this同样指向fn,当window与fn同时调用fn1时,this只会指向fn1的上一级(fn)
var fn = {
name:'冰冻黑熊'
fn1:{
name:'冰冻白熊',
fn2:function(){
console.log(this.name); //冰冻白熊
}
}
}
fn.fn1.fn2();
原因同上fn与fn1同时调用fn2(),但this只指向fn2()的上一级(fn1),fn1的作用域中 name的值为冰冻白熊
var fn = {
name:'冰冻黑熊',
fn1:{
name:'冰冻白熊',
fn2:function(){
console.log(this)//window
console.log(this.name)//undefined
}
}
}
var a = fn.fn1.fn2
a()
为什么会这样?因为 在将fn.fn1.fn2赋值给a时,并没有执行,a()执行时,调用a()的是window.所以指针指向window