本文实例分析了JavaScript中this的用法。分享给大家供大家参考,具体如下:
一."this"公理
this关键字永远都指向函数(方法)的所有者;
?
1
2
3
4
5
6
7
8
9
|
function fn1(){
this
};
fn1(); //this=>window
oDiv.onclick=fn1; //this=>oDiv
oDiv.onclick= function (){
this //this=>oDiv
fn1(); //this=>window
}
|
?
1
|
< div onclick = "this.fn1();" ></ div > //这种行间脚本的写法现在非常罕见
|
这里的this指向div,fn1()里的this指向window
?
1
2
3
4
5
6
7
8
9
|
var it=
{
info:[ "腾讯" , "搜狐" , "新浪" , "百度" ],
getinfo: function ()
{
alert( this .info.join( "," ));
}
};
it.getinfo();
|
输出:腾讯,搜狐,新浪,百度
二.函数赋值给变量时的"this"问题
?
1
2
3
4
5
6
7
8
9
10
|
var it=
{
info:[ "腾讯" , "搜狐" , "新浪" , "百度" ],
getinfo: function ()
{
alert( this .info.join( "," ));
}
};
var data=it.getinfo;
data();
|
输出:报错,TypeError: this.info is undefined
代码相当于
?
1
2
3
4
|
var data= function (){
alert( this .info.join( "," ));
};
data();
|
这里的this指向window,这里的data是被赋值,如果是var data=it.getinfo();那就是调用,结果还是腾讯,搜狐,新浪,百度。如果alert(this.it.info.join(","));结果还是腾讯,搜狐,新浪,百度。
?
1
2
3
4
5
6
7
8
9
10
11
|
var info=[ "QQ" , "sohu" , "sina" , "baidu" ]
var it=
{
info:[ "腾讯" , "搜狐" , "新浪" , "百度" ],
getinfo: function ()
{
alert( this .info.join( "," ));
}
};
var data=it.getinfo;
data();
|
输出:QQ,sohu,sina,baidu
三.作为对象方法调用时的"this"问题
?
1
2
3
4
5
6
7
8
|
function test()
{
alert( this .x);
}
var o={};
o.x=1;
o.t=test;
o.t();
|
输出:1
四.作为构造函数调用时的"this"问题
?
1
2
3
4
5
6
7
|
var x=2;
function test()
{
this .x=1;
}
test();
alert(x);
|
输出:1
?
1
2
3
4
5
6
7
8
|
var x=2;
function test()
{
this .x=1;
}
var o= new test();
alert(o.x);
alert(x);
|
输出:1,2
五.闭包中的"this"指向问题
?
1
2
3
4
5
6
7
8
9
10
11
12
|
var it=
{
info:[ "腾讯" , "搜狐" , "新浪" , "百度" ],
getinfo: function ()
{
function abc(){
alert( this .info.join( "," ));
}
abc();
}
};
it.getinfo();
|
输出:报错,TypeError: this.info is undefined
闭包中的this不能指向it
解决方法
?
1
2
3
4
5
6
7
8
9
10
11
12
13
|
var it=
{
info:[ "腾讯" , "搜狐" , "新浪" , "百度" ],
getinfo: function ()
{
var _this= this ;
function abc(){
alert(_this.info.join( "," ));
}
abc();
}
};
it.getinfo();
|
优点:无论外部函数名字(it)怎么变,都能指向info
时间: 2024-11-08 20:47:33