js的this
this是很多编程语言中的关键字,在JavaScript中一般这样理解this:this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象
普通函数调用
一般没有特指的情况下指向的都是全局对象window
var username='cn'
function fn(){
alert(this.username);//cn
}
fu();
window.username='cn'
function fn(){
alert(this.username);//cn
}
fn();
//可以理解为
//window.fn();
特殊情况
let username='cn'
function fn(){
alert(this.username);//undefined
}
fn();
因为用let声明的变量不是window
函数调用
函数名直接调用
function myobj(){
var myname = "发挥不广泛";
console.log(this);
console.log(this.myname);
}
myobj();//等价于 window.myobj();
//window
//undefined
通过对象函数名调用
var myname = "我是window的name";
function myobj(){
var myname = "发挥不广泛";
console.log(this);
console.log(this.myname);
}
var a = {
fun:myobj, //将函数myobj 赋值给a.fun
myname:"我是a的name"
};
myobj();
//window
//我是window的name
a.fun();
//myname:我是a的name
//我是a的name
简单例子
window.b=2222
let obj={
a:111,
fn:function(){
alert(this.a);//111
alert(this.b);//undefined
}
}
obj.fn();
//this指向上下文
构造函数调用
let TestClass=function(){
this.name='111';
}
let subClass=new TestClass();
subClass.name='cn';
console.log(subClass.name);//cn
let subClass1=new TestClass();
console.log(subClass1.name)//111