码迷,mamicode.com
首页 > Web开发 > 详细

js中this

时间:2016-08-21 22:51:59      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

首先声明,我是小白,以下只是自己的简单理解。

先看下面的代码:

1 (function () {
2     
3     console.log(this);
4 
5 })();

毫无疑虑,输出的是window。

 

在看下面代码:

1 (function () {
2 
3     function Main() {
4         console.log(this);
5     }
6     new Main();
7 })();

当然这样返回的是Main{}。

解释一下吧:首先说this返回的是当前对象,而在次代码中,this也就指的是,Main的这个对象了。(注意是对象)。

 

接着看下面的代码:

1 (function () {
2 
3     function main() {
4         console.log(this);
5     }
6     main();
7 })();

这个结果输出的是window,是不是有点不可思议。接下来分析一下,懂原理了就明白了O(∩_∩)O哈!

先提下new,它声明了一个对象,这个对象再去执行一个函数。拿第二个代码来说,new声明了一个对象Main{},它去执行的函数,所以这个this返回的是Main{}对象。

如果没有new,而直接执行函数main,那么谁去执行的呢,不用说,没有对象了,这个负担就交给了window了(window:我心累啊!)

最后提一点,第二个和第三个代码,函数名不一样,第二个代码是Main(),第一个字母是大写的,也就表明了它是构造函数。这里说的目的是,webstorm编译器会给予警告,不会报错,但看起来不爽,而且编码也不规范(对于我这强迫症患者更是痛苦啊O(≧口≦)O)

 

1 (function () {
2 
3     var self=this;
4     function Main() {
5         console.log(self);
6     }
7     new Main();
8 })();

这次输出的是window,这就表明this可以传递。

用处:当你想获取函数外部的函数的this时候可以先用一个对象变量保存this,从而传递this。(这算是一个技巧吧)

 

接着"上菜"

 1 (function () {
 2 
 3     function Main() {
 4         var show = this.showThis;
 5         show.apply(this);
 6     }
 7 
 8     Main.prototype.showThis = function () {
 9         console.log(this);
10     };
11     new Main();
12 })();

结果是Main{},这段代码用了原型方法,当然this也指的是Main{}这个对象。

prototype明天如果有时间话整理(明天又要开始培训了苦逼啊)

 

js中this

标签:

原文地址:http://www.cnblogs.com/chenluomenggongzi/p/5793759.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!