this的含义:代表的是执行当前代码的对象。
先从我最开始认识this说起:
<input id='btn' type='submit' value='确认' />
JS代码:
var btn = document.getElementById('btn');
btn.οnclick=function(){
alert(this.value);
}
运行,显示为:确认
老师在讲面向对象时讲到this,直接把我绕晕了,我查了查资料并实验了下,总结如下:
this指向的是一个 对象
1.纯粹的函数,非对象的方法:默认为指向window
var x=1;
function a(){
alert(this.x);
}
a();
在这里,我们定义了一个全局变量x并赋值为1,在纯函数中 alert 出来this,结果显示为: 1
默认情况下,this指向的是window,是全局Global,我们在执行函数a时,实际上是window.a();所以this现在指向的是全局
而我们在全局中定义了一个x,所以alert(this.x)结果是x的值。
为了证明,我们修改一下代码:
function a(){
this.x = 2;
}
a();
alert(x);
结果显示为2,说明我们执行函数a时,使用this定义了一个全局变量x,并赋值为2;
在这里列出一个特殊情况,在标签内部调用函数
<input id='btn' type='submit'οnclick='dosomething()' value='确认' />
在这里,这个标签点击时调用的函数,其this指向仍然为window全局
而:<input id='btn' type='submit'οnclick='dosomething(this)' value='确认' />
这里,因为调用函数时将this传入调用函数中,这个this指向的该标签
2.对象内的函数(对象内的方法),指向调用该函数的对象
var objA = new Object();//新建一个对象a
objA.someValue = 1;
objA.fnTest = function(){
alert('valueA:'+this.someValue);
}
var objB = new Object();//新建一个对象b
objB.someValue = 2;
objB.fnTest = function(){
alert('valueB:'+this.someValue);
}
objA.fnTest();
objB.fnTest();
分别显示valueA:1 valueB:2
3.在构造函数内调用,this指向新创建的的对象
function test(){
this.x = 1;
}
var o = new test();
alert(o.x);
显示:1。
4.使用其他方法绑定this指向
发
生