JavaScript this个人理解
2014-11-08 16:58
120 查看
一.调用公共函数,this默认指向的为window
直接上几个代码
1.
var a = 10;
function test(){
test.a=20;
alert(this.a);
}
test();
结果10
2.
var a =10;
function test(){
test.a=20;
alert(this.a);
test1();
}
function test1(){
alert(this.a);
}
test(); 结果:10 10
3. var a = 10;
function test(){
var a;
a = 5;
alert(a);
alert(this.a);
}
test(); 结果: 5 10
结论:
从上面的代码的结果来看, this指向的对象为window,每当alert(this.a) 此时的值都是a=10;
在每次调用test()来看,都没有给test绑定对象(除window外,因为 test(); <==> window.test();),故此时的this默认指向为window,而所有的公共变量都可以以这种
方式来写:window.a = 10 <==> var a = 10
故每次的alert(this.a) <==> alert(window.a)
所以结果为 10
二.给函数绑定对象
直接上代码
1.
<span style="white-space:pre"> </span>var a = 10;
var b = function(){
b.a = 20;
alert(this.a);
}
b.c = function(){
alert(this.a);
}
b();
b.c(); 结果: 10 20
2.<span style="white-space:pre"> </span>var a =10;
function test(){
test.a = 20;
this.a = 30;
}
b = new test();
alert(test.a);
alert(b.a); 结果: 20 30
结论:
代码二1中第一个this.a 仍然是指向window alert(this.a) <==>alert(window.a);
第二个this.a则指向b对象,因为函数是这么定义的 b.c = function(){}; 所以该函数绑定了b对象(该函数的拥有者),故调用该函数b.c();函数中this指向b对象
alert(this.a); <==> alert(b.a);
代码二2中的原理也是一样
创建一个b实例对象 test() 函数绑定的对象就是b(该函数的拥有者) 在函数test() this指向b,所有this.a <==> b.a
直接上几个代码
1.
var a = 10;
function test(){
test.a=20;
alert(this.a);
}
test();
结果10
2.
var a =10;
function test(){
test.a=20;
alert(this.a);
test1();
}
function test1(){
alert(this.a);
}
test(); 结果:10 10
3. var a = 10;
function test(){
var a;
a = 5;
alert(a);
alert(this.a);
}
test(); 结果: 5 10
结论:
从上面的代码的结果来看, this指向的对象为window,每当alert(this.a) 此时的值都是a=10;
在每次调用test()来看,都没有给test绑定对象(除window外,因为 test(); <==> window.test();),故此时的this默认指向为window,而所有的公共变量都可以以这种
方式来写:window.a = 10 <==> var a = 10
故每次的alert(this.a) <==> alert(window.a)
所以结果为 10
二.给函数绑定对象
直接上代码
1.
<span style="white-space:pre"> </span>var a = 10;
var b = function(){
b.a = 20;
alert(this.a);
}
b.c = function(){
alert(this.a);
}
b();
b.c(); 结果: 10 20
2.<span style="white-space:pre"> </span>var a =10;
function test(){
test.a = 20;
this.a = 30;
}
b = new test();
alert(test.a);
alert(b.a); 结果: 20 30
结论:
代码二1中第一个this.a 仍然是指向window alert(this.a) <==>alert(window.a);
第二个this.a则指向b对象,因为函数是这么定义的 b.c = function(){}; 所以该函数绑定了b对象(该函数的拥有者),故调用该函数b.c();函数中this指向b对象
alert(this.a); <==> alert(b.a);
代码二2中的原理也是一样
创建一个b实例对象 test() 函数绑定的对象就是b(该函数的拥有者) 在函数test() this指向b,所有this.a <==> b.a
相关文章推荐
- 个人猜想的web安全——理解PHP的sessionID的实现
- 【原】CAVLC的个人理解
- 自动化测试开发实践系列(一)个人对测试、质量、竞争的理解
- 【个人理解向】对构造函数的理解
- ftp和http的初步个人理解
- (C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)
- [转]个人对AutoResetEvent和ManualResetEvent的理解
- Android 中arm64-v8a、armeabi-v7a、armeabi、x86个人理解
- spring+mybatis通用dao层、service层的一些个人理解与实现
- lambda 个人学习理解
- 个人理解的Windows漏洞利用技术发展史
- 关于Volatile关键字含义的一些个人理解
- 个人对static关键字理解
- seq2seq里的 attention机制 的 原理 及 代码 及 个人理解
- 对Java通配符的个人理解(以集合为例)
- Web标准的web UI-来源、谬误与个人理解
- 谈[个人对计算机启动故障的理解]
- 关于适配器的个人理解
- 使用redis缓存数据需要注意的问题以及个人的一些思考和理解
- HDU 2665 个人理解(主席树)