首页 > 代码库 > js中的this关键字详解[转]
js中的this关键字详解[转]
本文实例分析了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=http://www.mamicode.com/it.getinfo; data(); |
输出:报错,TypeError: this.info is undefined
代码相当于
?
1
2
3
4
|
var data=http://www.mamicode.com/ function (){ alert( this .info.join( "," )); }; data(); |
这里的this指向window,这里的data是被赋值,如果是var data=http://www.mamicode.com/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=http://www.mamicode.com/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
js中的this关键字详解[转]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。