理解JavaScript中的this
在JavaScript中,this关键字是用来引用 调用该函数的 那个对象的。看几个栗子:
var name="Window";
var obj={
name:"Object",
funObj:function(){
console.log(this.name);
}
};
//
var funObjCopy=obj.funObj;
function a(){
console.log(this.name);
}
obj.aCopy=a; //Object
obj.funObj();
//Window
funObjCopy();
//Window
a();
//Object
obj.aCopy();
从上面的例子可以看出,this引用的是 调用该函数时“.”前面的那个对象(如 obj.funObj()、obj.aCopy() );如果没有通过“.”的方式而是直接调用,那么this引用的就是全局对象,换句话说,如果这个对象是一个函数调用对象或者全局对象,那么将得到对全局对象的引用;
接下来是个在嵌套函数中使用this的栗子:
var name="Window";
function test(){
var name="test01";
console.log(name);
console.log(this.name);
function funF(){
var name="test02";
console.log(name);
console.log(this.name);
}
funF();
} //test01 Window test02 Window
test();
注意funF函数中打印this.name得到的依然是Window;再来看一个类似例子:
var name="Window";
var obj={
name:"Object",
funObj:function(){
var name="Function";
function funF(){
return this;
}
console.log(name);
console.log(this.name);
console.log(funF().name);
}
}; //Function Object Window
obj.funObj();
注意这个例子中funF函数返回的是window对象,所以打印的结果依然是Window;由此我们可以得出:在方法内嵌套的函数中使用this,仍然会得到对全局对象的引用(除了通过“.”方式调用的)。
突然想到了call()和apply()方法,顺便记一下了
每个函数都包含两个非继承而来的方法:call()和apply();这两个方法的作用是一样的,都是为了在特定的作用域中调用函数,换句话说其实就是设置函数体内this对象的值。区别就在于apply()只接受两个参数,第一个和call()一样,都是指定this对象的值,另一个是必须是参数数组(可以是Array的实例,也可以是arguments对象);而call()方法的参数则必须逐个列举出来,将就第一个例子来看看:
var name="Window";
var obj={
name:"Object",
funObj:function(){
var name="Function";
console.log(this.name);
}
};
function a(){
console.log(this.name);
} //Window
a();
//Object
a.call(obj);
//Object
a.bind(obj);
理解JavaScript中的this的更多相关文章
- 理解JavaScript中的原型继承(2)
		两年前在我学习JavaScript的时候我就写过两篇关于原型继承的博客: 理解JavaScript中原型继承 JavaScript中的原型继承 这两篇博客讲的都是原型的使用,其中一篇还有我学习时的错误 ... 
- 深入理解JavaScript中创建对象模式的演变(原型)
		深入理解JavaScript中创建对象模式的演变(原型) 创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Objec ... 
- 深入理解JavaScript中的属性和特性
		深入理解JavaScript中的属性和特性 JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性. 主要内容如下: 理解JavaSc ... 
- 深入理解javascript中执行环境(作用域)与作用域链
		深入理解javascript中执行环境(作用域)与作用域链 相信很多初学者对与javascript中的执行环境与作用域链不能很好的理解,这里,我会按照自己的理解同大家一起分享. 一般情况下,我们把执行 ... 
- 【干货理解】理解javascript中实现MVC的原理
		理解javascript中的MVC MVC模式是软件工程中一种软件架构模式,一般把软件模式分为三部分,模型(Model)+视图(View)+控制器(Controller); 模型:模型用于封装与应用程 ... 
- 理解javascript中的策略模式
		理解javascript中的策略模式 策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换. 使用策略模式的优点如下: 优点:1. 策略模式利用组合,委托等技术和思想,有效 ... 
- 深入理解javascript中的立即执行函数(function(){…})()
		投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-06-12 我要评论 这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是 ... 
- 转载  深入理解JavaScript中的this关键字
		转载原地址: http://www.cnblogs.com/rainman/archive/2009/05/03/1448392.html 深入理解JavaScript中的this关键字 1. 一 ... 
- js架构设计模式——理解javascript中的MVVM开发模式
		理解javascript中的MVVM开发模式 http://blog.csdn.net/slalx/article/details/7856769 MVVM的全称是Model View ViewMod ... 
- 全面理解Javascript中Promise
		全面理解Javascript中Promise 最近在学习Promise的时候,在网上收集了一些资料,发现很多的知识点不够系统,所以小编特意为大家整理了一些自认为 比较好的文章,供大家更好地学习js中非 ... 
随机推荐
- 多线程12-ManualResetEventSlim
			)); )); )); t1.Start(); t2.Start(); ... 
- 【转载】如何编写ROS的第一个程序hello_world
			目录 1.工作空间的创建 2.功能包的创建 3.功能包的源代码编写 4.功能包的编译配置 5.功能包的编译 6.功能包的启动运行 既然ROS已经成功安装好了,大家一定很想亲自动动手编一个通过起手式例程 ... 
- css定位:相对定位、绝对定位、固定定位的区别与特性
			css定位:相对定位.绝对定位.固定定位的区别与特性 原文地址:http://www.qingzhouquanzi.com/106.html css定位常用的有以下三种: 使用了定位的共同特性: 这三 ... 
- Web API 入门一
			之前我也了解过Web API 这部分,但是没有系统学习,更没有相关记录,故现在,写些博客记录入门学习过程.首先,关于API,只要学习编程的都应该知道,也都用过,API(应用程序编程接口)是一些预先定义 ... 
- Mock接口数据 = mock服务 + iptable配置
			一.mock接口数据应用场景: 1.测试接口A,A接口代码中调用其他服务的B接口,由于开发排期.测试环境不通等原因,依赖接口不可用 2.测试异常情况,依赖接口B返回的数据格式不对.返回None.超时等 ... 
- Azkaban和Oozie的区别
			Azkaban和Oozie的区别: 当前,实际生产中最流行的两种Hadoop工作流引擎是Azkaban与Oozie.但活跃度最高的当是Azkaban了,下面对两者的异同之处作如下对比. 功能对比 Az ... 
- [好好学习]在VMware中安装Oracle Enterprise Linux (v5.7) - (5/5)
- [好好学习]在VMware中安装Oracle Enterprise Linux (v5.7) - (1/5)
			在想到Oracle Enterprise Linux,第一时间就是在Oracle官网上找到资源,但是,出现以下图片 
- Express 2015 RC for Windows 10 安装
			支持的操作系统 Windows 10 Technical Preview 硬件要求 1.6 GHz 或更快的处理器 1 GB RAM(如果在虚拟机上运行,则为 1.5 GB) 4 GB 可用硬盘空间 ... 
- tailf 跟踪日志文件
			1.命令功能 tailf 跟踪日志文件增长,作用跟tail –f相同.tailf将输出文件的最后10行,然后等待文件增长. 2.语法格式 tailf option file 参数说明 参数 参数说 ... 
