js中的this关键字详解[转]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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=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
以上是关于js中的this关键字详解[转]的主要内容,如果未能解决你的问题,请参考以下文章