再说一下this关键字

关于this在多说几句,this是在函数内部使用,用来引用包含函数的对象,而不是函数本身。

开始

因为有一点是:在顶层作用域中定义的所有变量,都是定义到了window对象上,看下面这个例子:


function test(){};

console.log(test === window.test);//true

这个也是我们都知道的一点,就像alert===window.alert一样。

而在之前的文章中,也对this做了一些说明,当时把函数的内部this指向分为三类:


fn(); //this === window
obj.fn();//this === obj;
obj.fn.call(obj2);//this === obj2;


但是,看到这里,又可以对该部分,进行进一步的缩减,可以分为两类了。

因为第一类的fn()其实质上完全相等于是window.fn();所以,也符合我们之前说的第二类。

所以呢,现在可以把函数内部this的指向分为两类:


obj.fn();//this === obj;当obj省略时,代表obj===window
obj.fn.call(obj2);//this === obj2;


抛去事件绑定不管,其实事件绑定,也可以算是obj.fn()类型中的一种,比如我们常用的obj.onclick = function(){};

而使用DOM3方法的事件绑定,前台JS无法看到其实现源码,想想应该也是差不多的,所以,this代表的含义,就可以分为上面的两种情况了。

也验证着最初说的一句话:

this是在函数内部使用,用来引用包含函数的对象,而不是函数本身(使用new关键字实例化构造函数和callapply的情况除外)”。

总结

本文单开一篇,也是因为,我本人对这个总结感觉非常有意义,所以~当然,这也是一个例子,alert===window.alert的情况,是我一直都知道的,但是在之前总结this关键字时,并没有意识到这些,也就是说,我对知识的合并还不能得心应手,很多的难以理解的问题,导致它们出现的实质因素,都是一些很基本的知识点,而这些也是我常想不到的。

以前的相关文章:函数中this的指向-简单认识关于闭包的一些-胡思乱想构造函数模式的一点新的认识

本文地址:http://www.zhangyunling.com/?p=366

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>