javascript this对象
函数运行时,自动生成的一个内部对象,只能在函数内部使用
随着函数使用场合的不同,this的值也发生着改变,但是有一个总原则:this指的是调用函数的那个对象(核心)
this对象的指向
一般情况下,我们会从以下四个方面去分析
1、纯粹的函数调用
例如
function test(){
this.x = 1;
alert(this.x);
this.x = 2;
}
test(); //
alert(x); //
所以在这边,this指的是全局对象global
这边还有一种情况,很多人会搞错
var x = 2;
function test(){
var x = 1;
function error(){
alert(this.x);
}
return error;
}
test(); //
这种情况下this依旧是全局对象global,因为调用它的依旧是全局对象
2、作为对象的方法调用
例如
var demo = {
x:1,
error : function () {
var x = 2;
alert(this.x)
}
};
demo.error(); //
这边的this指向的是对象demo
还有个迷惑性的例子
var x = 3;
var demo = {
x:1,
error : function () {
var x = 2;
function ss(){
alert(this.x);
}
return ss;
}
};
demo.error()(); //
这边的this又指向全局对象了.....换种方式看也许更清晰
1 (demo.error())(); //把()里的看成一个函数,其实调用这个函数的还是全局对象global
或者再换种写法
1 var x = 3;
2 var demo = {
3 x:1,
4 error : function () {
5 var x = 2;
6 function ss(){
7 alert(this.x);
8 }
9 ss(); // 3 不管函数在哪边,只要调用它是全局对象,那么this就指向全局对象
10 }
11 };
12 demo.error(); //
3、作为构造函数调用
例如
function test(){
this.x = 1;
}
var o = new test();
var x = 2;
alert(o.x); // 1
这边的this就指向新对象o
4、call()和apply()时
例如
var x = 3;
var o = {
x:1
};
var v = {
x:2,
test:function () {
return this.x;
}
};
alert(v.test()); // 2 this指向v
alert(v.test.call()); // 3 this指向全局
alert(v.test.call(o)); // 1 this指向o
当使用call和apply时,()中的对象是什么,this就指向什么对象
javascript this对象的更多相关文章
- javascript 全局对象--w3school
JavaScript全局对象 1. decodeURI()解析某个编码的URI. 2.decodeURInComponent()解析一个编码的URI组件. 3.encodeURI()把字符串编码为U ...
- JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString
JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString 如下示例: 直接写的a1就是一个Json对象,a2 就是一个Json对象字符串; 通 ...
- 从零构建JavaScript的对象系统
一.正统的类与继承 类是对象的定义,而对象是类的实例(Instance).类不可直接使用,要想使用就必须在内存上生成该类的副本,这个副本就是对象. 以Java为例: public class Grou ...
- 关于javascript自定义对象(来自网络)(最近几天不会的)
javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义 优点:动态的传递参数 缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存 funct ...
- 据说每个大牛、小牛都应该有自己的库——JavaScript原生对象拓展
在据说每个大牛.小牛都应该有自己的库——框架篇中我扬言要做个小牛,没想到一天没更新,小伙儿伴们就戏谑的问我,油哥是不是要太监了?其实事情是这个样子的,这不是太监的节奏,一是,关于写个自己的库的想法由来 ...
- JavaScript RegExp 对象
JavaScript RegExp 对象 RegExp 对象用于规定在文本中检索的内容. 什么是 RegExp? RegExp 是正则表达式的缩写. 当您检索某个文本时,可以使用一种模式来描述要检索的 ...
- JavaScript String 对象
JavaScript String 对象 String 对象 String 对象用于处理文本(字符串). String 对象创建方法: new String(). 语法 var txt = new S ...
- JavaScript Math 对象
JavaScript Math 对象 Math 对象 Math 对象用于执行数学任务. Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(). 语法 var ...
- JavaScript Number 对象
JavaScript Number 对象 Number 对象 Number 对象是原始数值的包装对象. Number 创建方式 new Number(). 语法 var num = new Numbe ...
- JavaScript Array 对象
JavaScript Array 对象 Array 对象 Array 对象用于在变量中存储多个值: var cars = ["Saab", "Volvo", & ...
随机推荐
- How Django works?
Django是如何工作的? 概念 以线上版本中Django和Nginx.uwsgi搭配,这里首先要了解uWSGI.uwsgi.WSGI分别代表着什么,其中uWSGI实现了uwsgi.WSGI.HTTP ...
- CentOS Linux 系统 英文 改中文
CentOS Linux 系统 英文 改中文 首先,使用root用户登录Linux系统,然后进入打开终端(桌面上右键第四个选项,应该是),然后进入到etc/sysconfig目录下
- 开机出现Oxc000000e故障的解决方法
Oxc000000e故障 故障表现:开机时不能正常地登录系统,而是直接弹出图2所示的Oxc000000e故障提示. 原因分析:由于安装或卸载某些比较特殊的软件,往往会对Win7的引导程序造成非常严重的 ...
- python细碎语法点
在系统入门python有的是没有遇到,有的是学过了缺乏使用没有记住,就开篇随笔记录这些基础的语法点,随时更新. with...as... 也就是说with是一个控制流语句,跟if/for/while/ ...
- JUnit4在Eclipse中的使用
测试是项目开发中很重要的一环.实际上,建议的项目前期编写过程是:构思-> 编写单元测试代码-> 编写接口->编写实现类-> 测试实现类->编写主类....JUnit是一个 ...
- python===基础,修改idle的输入风格
http://blog.csdn.net/aq_cainiao_aq/article/details/51701861
- linux 压缩解压打包工具大集合
压缩.解压缩及归档工具有很多,今天小编就整理几个大家较为常用的. compress gzip bzip2 xz zip tar cpio 一.压缩.解压工具 用法 压缩 工具 压缩后 压缩包格式 解 ...
- REST Adapter实现SAP PI中的增强XML/JSON格式转换
SAP标准的REST adapter有着XML/JSON转换的功能,它很有用,因为一方面SAP PI/PO内部以XML格式处理数据,而另一方面,在处理REST架构风格的时候,JSON才是事实上的格式. ...
- 011.Adding Search to an ASP.NET Core MVC app --【给程序添加搜索功能】
Adding Search to an ASP.NET Core MVC app 给程序添加搜索功能 2017-3-7 7 分钟阅读时长 作者 本文内容 1.Adding Search by genr ...
- WTL--SDI框架分析
创建SDI产生的基本类:CMainFrame,CAboutDlg和CWTLView(WTL为项目名). 由此可见,不同于MFC,WTL少了文档类,它的结构就只有简单的窗口类和视图类,而至于串行化(MF ...