最近工作和看书时遇到了很多js中'this',觉得有必要梳理一下。

1.在全局作用域中使用时,this就指向全局对象window。

var name='aaa';
alert(this.name);       //aaa
alert(window.name);     //aaa
alert(this===window);   //true

2.当在全局作用域中定义一个函数,在函数中使用this,此时函数执行的环境对象是全局对象window,所以this也指向window。

var name='aaa';
function sayName(){alert(this.name);       //aaaalert(window.name);     //aaaalert(this===window);   //true
}
sayName();

3.当然也可以通过函数的apply或call方法将函数中的this指向其他的作用域(环境对象)。

var obj={name:'bbb'}
var name='aaa';
function sayName(){alert(this.name);       //bbbalert(this===window);   //falsealert(this===obj);      //true
 }
sayName.apply(obj);

当改变了sayName的作用域时,this对象也跟着指向了sayName的作用域obj,所以此时this指向obj。

4.当函数作为构造函数使用时,在构造函数中使用this,则this指向的是通过构造函数创建出来的新的对象。

function Student(name){this.name=name;
}
var stu1=new Student('abc');alert(stu1.name);   //abc

使用构造函数创建对象时,首先会创建一个新的对象,然后会将构造函数的作用域赋给新对象,因此this就指向了新的对象。

5.当函数作为一个对象的方法时,在函数中使用this,此时this指向了这个对象。

var Student={name:'abc',sayName:function(){alert(this.name);       //abcalert(this===Student);  //true
    }
}
Student.sayName();

6.当在对象的方法中调用嵌套方法时,this指向全局对象(非严格模式)或undefined(严格模式)

var o={fun:function(){console.log(this===o);          //true
            f();function f(){console.log(this===o);      //falseconsole.log(this===window); //true
            }}}

嵌套的函数不会从调用它的函数中继承this.  

总结:this引用的是函数据已执行的环境对象。

转载于:https://www.cnblogs.com/Tzhibin/p/4322202.html

javascript中的'this'相关推荐

  1. 浅析 JavaScript 中的 函数 uncurrying 反柯里化

    柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...

  2. JavaScript中,this的绑定规则

    对于 JavaScript 新手来说,this 是非常基础同时也难以理解的知识点. 比如下面的代码,this 指向就有三种方式. 在<你不知道的 JavaScript>一书中,我总算比较清 ...

  3. Javascript中undefined,NaN等特殊比较

    以下内容转自: http://blog.csdn.net/hongweigg/article/details/38090093 1.问题:在Javascript中,typeof(undefined) ...

  4. Javascript中二进制数据处理方法

    Javascript中二进制数据处理方法 转载于:https://www.cnblogs.com/motadou/archive/2012/02/19/2358514.html

  5. JavaScript 中的有限状态机

    http://www.ibm.com/developerworks/cn/web/wa-finitemach/ JavaScript 中的有限状态机 Page navigation 系列文章 有限状态 ...

  6. 在Javascript中使用面向对象的编程

    by Mike Koss March 26th, 2003 这是一篇,我个人认为最好的,Javascript面向对象编程的文章.翻译不好的地方,还望大家指正,谢谢. 如果您需要,可以访问下面的地址取得 ...

  7. 取出url中的字符_如何在JavaScript中解析URL:例如主机名,路径名,查询,哈希?...

    统一资源定位符(缩写URL)是对Web资源(网页,图像,文件)的引用.URL指定资源位置和检索资源的机制(http,ftp,mailto). 例如,这是此博客文章的URL: 通常,您需要访问URL的特 ...

  8. 在javascript中判断类型

    String 一个字符串始终是一个字符串,所以这一块是很容易.除非使用new(new String)调用,否则typeof将返回"object".所以也要包含那些可以使用的字符串i ...

  9. JavaScript中几个重要的知识点(1) ---- 面向对象

    JavaScript中几个最重要的大知识点 面向对象 DOM事件 异步交互ajax 面向对象 在JS中可以把任意的引用和变量都看成是一个对象.面向对象的主要三个表现形式: 封装 继承 多态 1. 封装 ...

  10. javascript中实例方法与类方法的区别

    在javascript中,类有静态属性和实例属性之分,也有静态方法和实例方法之分 类属性(静态属性):通过类直接访问,不需要声明类的实例来访问 类方法(静态方法):通过类直接访问,不需要声明类的实例来 ...

最新文章

  1. NB-IoT,你真是太让我失望了
  2. 机器算法有哪几种 python_8种顶级Python机器学习算法-你必须学习
  3. 这位 50 岁的海归程序员,当着老板还在天天改 Bug
  4. python写透视挂_python opencv 透视变换
  5. IDEA给项目添加lib/jar
  6. WEB服务器Nginx WINDOWS最简部署
  7. 用C语言求解合式公式的主合取范式和主析取范式
  8. c# chart 各个属性_C# Chart各个属性详细解析、应用
  9. AAEGan 简介与代码实战
  10. linux编译firefox,linux安装firefox
  11. 常用Java工具类:java抽奖码生成
  12. 哥尼斯堡七桥问题用计算机,哥尼斯堡七桥问题解法真的解不出来?请尽快解答.急...
  13. c语言自动安装打印机驱动,安装自定义的即插即用打印机驱动程序
  14. 广西大学计算机考研资料汇总
  15. 【2019 CSP-JのT4】[洛谷P5663]加工零件【最短路 · 变式】
  16. 基于Matlab的火灾预警系统
  17. 小程序springboot食堂预约订餐系统毕业设计-附源码221554
  18. Java 后端工程师 2018 书单推荐
  19. 实证论文复刻|stata安慰剂检验
  20. 百人计划 图形1.4 PC手机图形API介绍

热门文章

  1. 什么叫百度下拉框?除了百度下拉还有哪些下拉词框可以优化?
  2. stdmove 跟 左键引用 区别_C++ auto和decltype的区别
  3. java jodd_Jodd :一款优雅的 Java 工具集
  4. 名为 cursor_jinserted 的游标不存在_一个工程师必须了解的测量常识,你不知道怎么行...
  5. 十八年开发经验分享(四)问题解决篇(下)
  6. android 中 FLAG_SHOW_WHEN_LOCKED 的用法及解释
  7. python搭建网页_使用python快速搭建本地网站
  8. window直接运行不需要环境的软件是什么语言开发的_C语言为何不会过时?你需要掌握多少种语言?_C 语言...
  9. AjaxControlToolKit插件tabContainer在IIS7以上版本部署后自动添加visibility:hidden属性 问题的解决方案...
  10. 心跳脑裂解决方案之Heartbeat的Stonith配置