详解javascript中this的工作原理
在 JavaScript 中 this 常常指向方法调用的对象,但有些时候并不是这样的,本文将详细解读在不同的情况下 this 的指向。
一、指向 window:
在全局中使用 this,它将会指向全局对象,因为浏览器中运行的 JavaScript 的全局对象默认为 window,
所以,此时 this 指向 window。
例如:
console.log(this) // 控制台将打印出 window 对象
在全局作用域内的函数调用, this 也会执行 window。
function foo(){
console.log(this);
};
foo(); // 控制台也会打印出 window 对象
此处并不难理解,因为全局对象默认为 window,则 foo() 实质是 window.foo()。
其实,在javascript中函数调用时,this都会指向window对象。看下面的执行结果:
function foo(){
console.log(this);
};
var demo = document.querySelector(".demo");
demo.onclick = foo; //this指向demo元素对象
demo.onclick = function(){
foo(); //this指向window对象
};
注意:在 ES5 中,使用严格模式时,不存在全局变量, 此时 this 将不再指向 window, 而是 undefined 。
二、指向方法调用的对象:
在对象的方法调用中,this 指向该方法调用的对象。
var obj = {
getMe: function(){
console.log(this)
}
};
obj.getMe(); // 控制台打印出 obj 对象
三、构造函数内,指向调用构造函数所创建的对象实例:
通常我们会使用 new 关键词调用构造函数创建新的对象实例,此时构造函数内的 this 就会指向这个新创建出来的对象。
如:
//构造函数
function Person(name){
this.name = name;
this.getMe = function(){
console.log(this);
}
}; var joe = new Person("joe"); joe.getMe(); //控制台打印出一个新的名字为 “joe” 的 Person 实例
四、使用函数的 call 或 apply 方法时,this 将会被显式设置为函数调用的第一个参数:
例:
var obj = {
name: "object"
};
function a(){
console.log(this)
};
a.call(obj); //控制台打印出 obj 对象
出现这样的结果是由 call 和 apply 的实现原理决定的,call 和 apply 改变 this 指向的原理是它改变了函数的运行上下文环境。
详解javascript中this的工作原理的更多相关文章
- 【转】详解JavaScript中的this
ref:http://blog.jobbole.com/39305/ 来源:foocoder 详解JavaScript中的this JavaScript中的this总是让人迷惑,应该是js众所周知的坑 ...
- (转载)详解Javascript中prototype属性(推荐)
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
- HTTPS详解二:SSL / TLS 工作原理和详细握手过程
HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流 ...
- 详解 javascript中offsetleft属性的用法(转)
详解 javascript中offsetleft属性的用法 转载 2015-11-11 投稿:mrr 我要评论 本章节通过代码实例介绍一下offsetleft属性的用法,需要的朋友可以做一 ...
- 详解javascript中的this对象
详解javascript中的this对象 前言 Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象.Javascript可以通过一定的 ...
- 详解JavaScript中的原型
前言 原型.原型链应该是被大多数前端er说烂的词,但是应该还有很多人不能完整的解释这两个内容,当然也包括我自己. 最早一篇原型链文章写于2019年07月,那个时候也是费了老大劲才理解到了七八成,到现在 ...
- 详解JavaScript中的this
JavaScript中的this总是让人迷惑,应该是js众所周知的坑之一. 个人也觉得js中的this不是一个好的设计,由于this晚绑定的特性,它可以是全局对象,当前对象,或者…有人甚至因为坑大而不 ...
- JavaScript中this的工作原理以及注意事项
在JavaScript中,this 的概念比较复杂.除了在面向对象编程中,this 还是随处可用的.这篇文章介绍了this 的工作原理,它会造成什么样的问题以及this 的相关例子. 要根据this ...
- 【转】详解JavaScript中的异常处理方法
有三种类型的编程错误:(1)语法错误和(2)运行时错误(3)逻辑错误:语法错误: 语法错误,也被称为解析错误,在编译时进行传统的编程语言,并出现在JavaScript解释时. 例如,下面一行将导致一个 ...
随机推荐
- python:序列化与数据持久化
数据持久化的方式有: 1.普通文件无格式写入:将数据直接写入到文件中 2.普通序列化写入:json,pickle 3.DBM方式:shelve,dbm 相关内容: json pickle shelve ...
- mysql快速生成truncate脚本清空数据库表记录
语句格式: select CONCAT('truncate TABLE ',table_schema,'.',TABLE_NAME, ';') from INFORMATION_SCHEMA.TABL ...
- Fedora 29 使用 SCL (Software Collections)
在社区中SCL 由Centos 项目进行维护,所以我们使用CentOS 7 SCL源.CentOS SCL中提供了devtoolset-7-gcc-c++,版本正好为 gcc version 7.3. ...
- js入门-文本框输入特定内容控制另一个文本框
在填写表单时,有时需要某些文本框隐藏,当一文本框输入特定内容时才会显示隐藏的文本框,这一功能可以用onchange事件或oninput事件实现.下面对比下两种方法实现的区别: onchange()定义 ...
- [java基础]一文理解java多线程必备的sychronized关键字,从此不再混淆!
java并发编程中最长用到的关键字就是synchronized了,这里讲解一下这个关键字的用法和容易混淆的地方. synchronized关键字涉及到锁的概念, 在java中,synchronized ...
- Unity3D中自带事件函数的执行顺序
在Unity3D脚本中,有几个Unity3D自带的事件函数按照预定的顺序执行作为脚本执行.其执行顺序如下: 编辑器(Editor) Reset:Reset函数被调用来初始化脚本属性当脚本第一次被附到对 ...
- SpringMVC+Spring+Mybatis框架集成
一.基本概念 1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-O ...
- 转://Oracle 11gR2 RAC ASM磁盘全部丢失后的恢复
一.环境描述 (1)Oracle 11.2.0.3 RAC ON Oracle Linux 6 x86_64,只有一个ASM外部冗余磁盘组--DATA: (2)OCR,VOTEDISK,DATAFIL ...
- http请求的全过程
参考资料 http://blog.jobbole.com/106632/ https://www.cnblogs.com/engeng/articles/5959335.html https://ww ...
- 查看linux服务器的配置
https://zhidao.baidu.com/question/489376921.html 1.查看逻辑CPU个数: #cat /proc/cpuinfo |grep "process ...