函数运行时,自动生成的一个内部对象,只能在函数内部使用

随着函数使用场合的不同,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对象的更多相关文章

  1. javascript 全局对象--w3school

    JavaScript全局对象 1.  decodeURI()解析某个编码的URI. 2.decodeURInComponent()解析一个编码的URI组件. 3.encodeURI()把字符串编码为U ...

  2. JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString

    JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString 如下示例: 直接写的a1就是一个Json对象,a2 就是一个Json对象字符串; 通 ...

  3. 从零构建JavaScript的对象系统

    一.正统的类与继承 类是对象的定义,而对象是类的实例(Instance).类不可直接使用,要想使用就必须在内存上生成该类的副本,这个副本就是对象. 以Java为例: public class Grou ...

  4. 关于javascript自定义对象(来自网络)(最近几天不会的)

    javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义 优点:动态的传递参数 缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存 funct ...

  5. 据说每个大牛、小牛都应该有自己的库——JavaScript原生对象拓展

    在据说每个大牛.小牛都应该有自己的库——框架篇中我扬言要做个小牛,没想到一天没更新,小伙儿伴们就戏谑的问我,油哥是不是要太监了?其实事情是这个样子的,这不是太监的节奏,一是,关于写个自己的库的想法由来 ...

  6. JavaScript RegExp 对象

    JavaScript RegExp 对象 RegExp 对象用于规定在文本中检索的内容. 什么是 RegExp? RegExp 是正则表达式的缩写. 当您检索某个文本时,可以使用一种模式来描述要检索的 ...

  7. JavaScript String 对象

    JavaScript String 对象 String 对象 String 对象用于处理文本(字符串). String 对象创建方法: new String(). 语法 var txt = new S ...

  8. JavaScript Math 对象

    JavaScript Math 对象 Math 对象 Math 对象用于执行数学任务. Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(). 语法 var ...

  9. JavaScript Number 对象

    JavaScript Number 对象 Number 对象 Number 对象是原始数值的包装对象. Number 创建方式 new Number(). 语法 var num = new Numbe ...

  10. JavaScript Array 对象

    JavaScript Array 对象 Array 对象 Array 对象用于在变量中存储多个值: var cars = ["Saab", "Volvo", & ...

随机推荐

  1. 4.npm模块安装和使用(axios异步请求,lodash工具库)

    建立package.json npm init 下载包 npm install axios npm install lodash 下载包,并加到package里面 npm install axios ...

  2. YAML - 简介

    YAML - YAML An't a Markup Lanague P.S. YAML was originally was side to mean Yet Another Markup Langu ...

  3. UITextField成为第一响应者

    @interface CSRegisterTwoViewController ()<UITextFieldDelegate> @property (weak, nonatomic) IBO ...

  4. Java微信公众平台开发之公众号支付(微信内H5调起支付)

    官方文档点击查看准备工作:已通过微信认证的公众号,必须通过ICP备案域名(否则会报支付失败)借鉴了很多大神的文章,在此先谢过了 整个支付流程,看懂就很好写了 一.设置支付目录 在微信公众平台设置您的公 ...

  5. 前端到后台ThinkPHP开发整站(6)

    今天终于把整个后台管理系统弄好了,其实没什么难点,只是作为一个Thinphp学习的练手项目,这个项目,现在还只能算是做了一半,还有前台展示方面的功能没有完成.先过一遍后台的功能吧! 1.首页 2.菜单 ...

  6. webpack 引入 bootstrap

    Bootstrap中是一种事实上的界面标准,标准到现在的网站大量的使用它.如果可以使用webpack引入的bootstrap,就可以一个npm install完成项目的依赖,而不必手工的添加到html ...

  7. Matlab学习笔记(1)

    在帮助文档中查看学习视频的时候.出现以下对话框,不能查看 解决办法:   在系统环境变量中找到Path.添加“%SystemRoot%\system32;%SystemRoot%;%SystemRoo ...

  8. 爬取西刺ip代理池

    好久没更新博客啦~,今天来更新一篇利用爬虫爬取西刺的代理池的小代码 先说下需求,我们都是用python写一段小代码去爬取自己所需要的信息,这是可取的,但是,有一些网站呢,对我们的网络爬虫做了一些限制, ...

  9. shell之参数传递

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推-- 实例 以下实例我们向脚本传递三 ...

  10. DOM+面向对象面试题

    1.dom常见的节点类型---------------------------解彬1510-B 1.nodeType------节点类型,元素节点是1,文本节点是3. 2.firstChild---- ...