Javascript------this的奥秘
来源:互联网 发布:2017中国城市癌症数据 编辑:程序博客网 时间:2024/04/29 16:13
达人科技 2016-12-09 21:52Javascript 之探索this的奥秘
前言: this 是 JavaScript 比较特殊的关键字,运用的地方之广,方式之灵活奠定了它的强大,但同时注定了它的难用 。自己刚开始学的时候被绕的很晕,为了彻底弄懂它查了很多资料。然后将自己学的东西整理了一下,以通俗易懂的方式表达出来,权当做学习笔记,同时也可以给有需要的童鞋做下参考^_^
什么是this?
this 关键字的含义是明确且具体的,即指代当前对象。即意味着这个 this 是在某种相对情况下才成立的。
this 被分为三种情况:全局对象、当前对象或者任意对象;判断处于那种情况,这完全取决于函数的调用方式,JavaScript 中主要的函数调用有以下几种方式:
- 作为普通函数调用
- 作为对象方法调用
- 作为构造函数调用
使用 apply 或 call 调用
1. 作为普通函数调用
------这是我们最常用的方法,这种调用方式属于全局调用,这里的 this 指的是全局对象
function test{ this.a = 5; alert(this.a); alert(this);}test; // 5 [object Window]
如上所示:定义在全局的函数, 函数的所有者就是当前页面, 也就是window对象,所以example的调用对象就是Window,因此这里面的this就代表Window;
换一种写法:
var a = 5;function test{ var a = 10; alert(this.a);}test; //5
如上所示:test函数内部也声明了一个变量a,但是调用test的结果为5,说明此时函数内部的this代表了全局对象即Window;
再换种写法:
var a = 5;function test{ this.a = 10;}test;alert(a); //10
如上所示: 调用test函数,更改了全局变量a的值,即表明此时this代表全局对象。
2.作为对象函数的调用
------当函数被某个对象调用时,此时this就指向了这个对象
var name="张三"; var person={ name:"李四", showName:function{ alert(this.name); } } person.showName; //输出 李四 var other=person.showName; other; //输出 张三
如上所示:执行 person.showName的结果为 李四,说明此时showName中的this指向了person;
而把person.showName赋给other后,因为other属于全局变量,可以看成是window对象的一个属性。所以当调用other,相当于调用window.other,因此this指向了window, 输出结果为 张三;
所以说作为函数对象调用时,this就指向了这个调用的对象。
3. 作为构造函数调用
------构造函数,就是通过这个函数生成一个新对象(object),这时候的 this 就会指向这个新对象;
function animal{ this.name = "豆豆";}var dog = new animal;alert(dog.name); // 输出 豆豆
如上所示:通过new关键字生成一个object类型的对象并把它赋给dog,执行这个构造函数的话,会吧构造函数作用域里的this指向这个对象,在这里就是指向了dog,因此this.name 等同于dog.name, 所以输出结果为豆豆。
4.使用 apply 或 call 调用
------apply是函数对象的一个方法,它应用某一对象的一个方法,用另一个对象替换当前对象。
var a = "张三";function test{ alert(this.a);}var b = {};b.a = "李四";b.n = test;b.n; //李四b.n.apply; //张三b.n.apply(b); //李四
如上所示:b.n----因为调用的对象为b,所以this指向了b,this.a == b.a ,所以结果为李四;
b.n.apply----当apply的参数为空时,就是没有对象去替换当前对象,默认用全局对象,所以this指向window,结果为张三;
b.n.apply(b)----指将当前的this指向替换成b,因此this指向了b,结果为李四
(本文参考了网上的资料和一些书籍,如有错误之处,欢迎指出,将及时改正,么么哒O(∩_∩)O)
总结:本文介绍了 JavaScript 中的 this 关键字在各种情况下的含义,实例都很简单,这样更能有助于加深理解。虽然这只是 JavaScript 中一个很小的概念,但借此我们可以了解 JavaScript 中函数的执行环境,充分掌握this的相关知识有助于我们在编写面向对象的JavaScript程序时能够游刃有余。最后,感谢您的观看。
后记------以前写的博客内容有点乱,所以全给删了,决定以后好好写,会将学到的知识记录在博客中,方便你我他。。有兴趣的小伙伴可以一块多多交流,共同进步O(∩_∩)O
Javascript 之探索this的奥秘
前言: this 是 JavaScript 比较特殊的关键字,运用的地方之广,方式之灵活奠定了它的强大,但同时注定了它的难用 。自己刚开始学的时候被绕的很晕,为了彻底弄懂它查了很多资料。然后将自己学的东西整理了一下,以通俗易懂的方式表达出来,权当做学习笔记,同时也可以给有需要的童鞋做下参考^_^
什么是this?
this 关键字的含义是明确且具体的,即指代当前对象。即意味着这个 this 是在某种相对情况下才成立的。
this 被分为三种情况:全局对象、当前对象或者任意对象;判断处于那种情况,这完全取决于函数的调用方式,JavaScript 中主要的函数调用有以下几种方式:
- 作为普通函数调用
- 作为对象方法调用
- 作为构造函数调用
使用 apply 或 call 调用
1. 作为普通函数调用
------这是我们最常用的方法,这种调用方式属于全局调用,这里的 this 指的是全局对象
function test{ this.a = 5; alert(this.a); alert(this);}test; // 5 [object Window]
如上所示:定义在全局的函数, 函数的所有者就是当前页面, 也就是window对象,所以example的调用对象就是Window,因此这里面的this就代表Window;
换一种写法:
var a = 5;function test{ var a = 10; alert(this.a);}test; //5
如上所示:test函数内部也声明了一个变量a,但是调用test的结果为5,说明此时函数内部的this代表了全局对象即Window;
再换种写法:
var a = 5;function test{ this.a = 10;}test;alert(a); //10
如上所示: 调用test函数,更改了全局变量a的值,即表明此时this代表全局对象。
2.作为对象函数的调用
------当函数被某个对象调用时,此时this就指向了这个对象
var name="张三"; var person={ name:"李四", showName:function{ alert(this.name); } } person.showName; //输出 李四 var other=person.showName; other; //输出 张三
如上所示:执行 person.showName的结果为 李四,说明此时showName中的this指向了person;
而把person.showName赋给other后,因为other属于全局变量,可以看成是window对象的一个属性。所以当调用other,相当于调用window.other,因此this指向了window, 输出结果为 张三;
所以说作为函数对象调用时,this就指向了这个调用的对象。
3. 作为构造函数调用
------构造函数,就是通过这个函数生成一个新对象(object),这时候的 this 就会指向这个新对象;
function animal{ this.name = "豆豆";}var dog = new animal;alert(dog.name); // 输出 豆豆
如上所示:通过new关键字生成一个object类型的对象并把它赋给dog,执行这个构造函数的话,会吧构造函数作用域里的this指向这个对象,在这里就是指向了dog,因此this.name 等同于dog.name, 所以输出结果为豆豆。
4.使用 apply 或 call 调用
------apply是函数对象的一个方法,它应用某一对象的一个方法,用另一个对象替换当前对象。
var a = "张三";function test{ alert(this.a);}var b = {};b.a = "李四";b.n = test;b.n; //李四b.n.apply; //张三b.n.apply(b); //李四
如上所示:b.n----因为调用的对象为b,所以this指向了b,this.a == b.a ,所以结果为李四;
b.n.apply----当apply的参数为空时,就是没有对象去替换当前对象,默认用全局对象,所以this指向window,结果为张三;
b.n.apply(b)----指将当前的this指向替换成b,因此this指向了b,结果为李四
(本文参考了网上的资料和一些书籍,如有错误之处,欢迎指出,将及时改正,么么哒O(∩_∩)O)
总结:本文介绍了 JavaScript 中的 this 关键字在各种情况下的含义,实例都很简单,这样更能有助于加深理解。虽然这只是 JavaScript 中一个很小的概念,但借此我们可以了解 JavaScript 中函数的执行环境,充分掌握this的相关知识有助于我们在编写面向对象的JavaScript程序时能够游刃有余。最后,感谢您的观看。
后记------以前写的博客内容有点乱,所以全给删了,决定以后好好写,会将学到的知识记录在博客中,方便你我他。。有兴趣的小伙伴可以一块多多交流,共同进步O(∩_∩)O
- Javascript------this的奥秘
- JavaScript奥秘之让人捉摸不定的this
- 【初窥javascript奥秘之让人捉摸不定的this】你知道现在this指向哪里吗???
- [JavaScript] 三等双等的奥秘
- javascript的this使用
- 关于JavaScript的this
- Javascript的this用法
- Javascript的this用法
- Javascript的this用法
- Javascript的this用法
- Javascript的This用法
- Javascript的this用法
- javascript的this关键字
- Javascript的This用法
- Javascript的This用法
- JavaScript的"this"
- 简析javascript的this
- Javascript的this用法
- js二维数组排序
- Xcode之NsTableView
- React Native环境配置之Windows版本搭建
- 连接adb报错,请求正确运行adb的问题解决
- 千丝万缕的FGC与Buffer Pool
- Javascript------this的奥秘
- 收藏精简Android6.0运行时权限处理,70行代码工具类
- javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
- struts开发经验汇总
- C++文件写入、读出函数,ofstream的使用方法
- JS 联动菜单简单例子
- Express框架入门介绍
- Android简单的多图选择器
- UVa 10827 Maximum sum on a torus