javascript this关键字指向详解
在之前写代码的经历中,常常试过写着写着this就莫名其妙的不知道指向到哪里去了。今天看了曾探的javascript设计模式,里面特别谈到了this在不同情况下指代的对象,非常有意思。
this指代的情况
this有以下4种情况:
1、对象.函数的形式调用:object.function();
2、普通函数的形式调用:function();
3、构造器调用;
4、Function.prototype.call或Function.prototype.apply调用;
1、对象.函数的形式调用
对象.函数方式调用时,指代该对象。
| 1 2 3 4 5 6 7 | varobj = {    num:1,    getNum:function(){        alert(this.num);//输出1    }}obj.getNum(); | 
2、普通函数形式调用
普通函数的方式被调用时,this指向全局对象。
| 1 2 3 4 5 6 7 8 9 10 | window.num = 2;varobj = {    num:1,    getNum:function(){        alert(this.num);    }}obj.getNum();//弹出1varfun1 = obj.getNum;fun1();    //弹出2 | 
太神奇了,直接调用函数 fun(); 与通过对象调用函数 xxx.fun(); this指代的对象不同。
3、构造器调用
为了能够用上new关键字,javascript的创建对象可以这样定义。
| 1 2 3 | varperson = function(){    this.name = '刘备';} | 
在这种情况下,this指代这个正在创建中的对象。
| 1 2 | varp = newperson();alert(p.name);//弹出刘备 | 
4、Function.prototype.call或Function.prototype.apply调用
| 1 2 3 4 5 6 7 8 9 10 11 | varobj1 = {    name:'关羽',    getName:function(){        returnthis.name;    }}varobj2 = {    name:'刘备'}alert(obj1.getName());    //关羽alert(obj1.getName.call(obj2));    //刘备 | 
javascript this关键字指向详解的更多相关文章
- 面向对象(OOP)--OOP基础与this指向详解
		前 言 学过程序语言的都知道,我们的程序语言进化是从“面向机器”.到“面向过程”.再到“面向对象”一步步的发展而来.类似于汇编语言这样的面向机器的语言,随着时代的发展已经逐 ... 
- Javascript中prototype属性详解   (存)
		Javascript中prototype属性详解 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不 ... 
- this指向详解及改变它的指向的方法
		一.this指向详解(彻底理解js中this的指向,不必硬背) 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是 ... 
- JavaScript面向对象编程—this详解
		this详解 作者的话 在JavaScriptOPPt面向对象编程中,this这位老大哥,相信大家不会陌生.大家在遇到this时,很多朋友难免会有个疑问:"这个this是什么,它到底指向 ... 
- 【JavaScript中的this详解】
		前言 this用法说难不难,有时候函数调用时,往往会搞不清楚this指向谁?那么,关于this的用法,你知道多少呢? 下面我来给大家整理一下关于this的详细分析,希望对大家有所帮助! this指向的 ... 
- JavaScript中的this详解
		前言 this用法说难不难,有时候函数调用时,往往会搞不清楚this指向谁?那么,关于this的用法,你知道多少呢? 下面我来给大家整理一下关于this的详细分析,希望对大家有所帮助! this指向的 ... 
- Javascript常用的设计模式详解
		Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ... 
- JavaScript 各种遍历方式详解及总结
		JavaScript 各种遍历方式详解 在$.each中想要终止循环,但是它没有continue或者break这样的终止方式,所以尝试使用return来进行终止,但是发现并没有跳出循环.为了搞清楚js ... 
- JavaScript进阶内容——DOM详解
		JavaScript进阶内容--DOM详解 当我们已经熟练掌握JavaScript的语法之后,我们就该进入更深层次的学习了 首先我们思考一下:JavaScript是用来做什么的? JavaScript ... 
随机推荐
- Python3 之 import 和 当前目录
			环境: Python-3.4.3 Web.py-0.37 安装 web.py 的时候,提示 ImportError: No module named 'utils' 看看源码,setup.py,有这么 ... 
- js动态更改对象属性值的方法
			下面代码,替换属性名称包含date的属性中的T为空格. for (var o in data) { //console.info(eval("d ... 
- jsr133
			1:介绍 java虚拟机支持多线程运行.线程代表的就是Thread class.对用户来说创建线程的唯一办法就是创建一个Thread对象:每一个线程都和一个Thread对象关联.Thread对象调用s ... 
- C#中dynamic的正确用法
			C#中dynamic的正确用法 http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4 ... 
- 知识积累:CA详解
			所有证书有多种文件编码格式,主要包括: CER编码(规范编码格式):是BER(基本编码格式)的一个变种,比BER规定得更严格DER编码(卓越编码格式):是BER(基本编码格式)的一个变种, 比BER ... 
- Ubuntu16.04 安装配置Caffe
			Caffe已经是第三次安装配置了,为什么是第三次呢?因为我实在是低估了深度学习对于硬件的要求.第一次我在自己笔记本上配置的单核,CPU only ... 结果是,样例数据跑了4小时,这还怎么玩?第二 ... 
- mongodb 对内嵌文档(数组) group分页查询,并设置查询条件
			文档示例Account的其中一条记录: // collection: Account { "_id" : ObjectId("5843e38e535f3708f759b2 ... 
- AMBA
			基于IP复用的设计方法在SOC设计中得到了广泛的应用,设计过程中,片上总线的设计师最关键的问题. AMBA是由ARM公司退出的片上总线,是一种流行的工业标准片上结构. AMBA规范主要包括了AHB(A ... 
- 关于无法使用xx-pc附加到应用程序iisexpress.exe
			问题表现:1.本地调试F5不能调试 2.IIS调试 附加到进程 提示无法访问 解决方法: 用管理员身份在cmd中运行:netsh winsock reset,然后重启. 
- 简单的聊天室代码php+swoole
			php swoole+websocket 客户端代码 <!DOCTYPE html> <html> <head> <title></title&g ... 
