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

随着函数使用场合的不同,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. JS实现添加至购物车功能

    效果图展示: 当将书拖拽至购物车一览时: 首先将页面的基本结构写出来: <!DOCTYPE html> <html lang="en"> <head& ...

  2. java大数取余

    java大数取余: 类方法:BigInteger.divideAndRemainder() 返回一个数组,key = 0为商key = 1为余数 import java.util.*; import ...

  3. SQL Server数据库基础笔记

    启动和停止SQL Server服务三种形式 后台启动服务 计算机->右键->管理->服务和应用程序->服务->sql server(MSSQLSERVER) SQL Se ...

  4. HDU字符串基础题(1020,1039,1062,1088,1161,1200,2017)

    并不是很精简,随便改改A过了就没有再简化了. 1020. Problem Description Given a string containing only 'A' - 'Z', we could ...

  5. CentOS6 安装Sendmail + Dovecot + Roundcubemail

    前言 本文是继CentOS6 安装Sendmail + Dovecot + Squirrelmail 关于邮箱服务器配置的第二篇文章,因为关于使用Sendmail进行相关配置的文章.资料等太老,而且资 ...

  6. 开源作业调度工具实现开源的Datax、Sqoop、Kettle等ETL工具的作业批量自动化调度

    1.阿里开源软件:DataX DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳 ...

  7. @font-face 使用过程

    格式:   TureTpe(.ttf)格式: .ttf字体是Windows和Mac的最常见的字体,是一种RAW格式,因此他不为网站优化,支持这种字体的浏览器有[IE9+,Firefox3.5+,Chr ...

  8. IPV4/IPV6网络地址相关知识

    IPv4地址:连接在Internet的每台主机(或路由器)都被分配了一个32bit的全球唯一的标识符,就是IP地址. IPv4地址的组成:网络号 + 主机号 IPv4地址的分类: A类地址:网络地址( ...

  9. 使用Jetty运行Java Web项目(Maven)

    目前流行的两款IDE: Eclipse和IntelliJ IDEA 2. IntelliJ IDEA

  10. HTML-JS基础 变量与输入输出 运算符 分支结构

    js中的变量 1.JS中变量声明的写法: var num=10;//使用var声明的变量属于局部变量只在当前作用域内有效 num=10;//不用var声明的变量,默认为全局变量,在整个JS文件中都有效 ...