javascript 中的 this 关键字详解
1.javascript 中 什么是 this?
this 指的是当前行为执行的主体,或者是当前方法执行的主体
context:是当前行为或者方法执行的环境
实例:
xx 去北京饭店吃东西;上下文是“北京饭店”, this 是 xx
2. 那么如何判断一个函数在执行的时候,函数体内的 this 关键字是谁呢?主要有以下几条规律:
1)一个函数体内的 this 关键字和这个函数的在哪里定义,哪里执行都没有关系;
2) 判断一个方法执行的时候,函数的执行主体是谁?主要看方法前面有没有点(.),如果函数执行的时候,函数前面有点 (.),点(.) 前面是谁,这个函数被执行的时候,函数体内的 this 关键字就是谁;
且看代码:
函数执行的时候,前面没有点的情况:
function fn() {
console.log(this.name);
}
window.name = 'windwo";
fn();
函数以 xx.fn的方式执行的时候:
person = {
name:'alice',
}
function fn(){
console.log(this.name);
}
//给person 对象添加一个方法
person.fn = fn;
person.fn();
3) 自执行函数执行的时候,函数体内的 this 关键字永远是 window 对象(和自执行函数在哪里执行没有任何关系);
window.name = 'window';
function fn(){
console.log(this.name);
}
var person = {
name: 'alice',
//匿名函数执行的时候, this 关键字指向 window
// 匿名函数的执行结果:person 对象的 sayName属性指向 fn
sayName:(function(){
console.log(this.name);
return fn;
})(),
age:25
};
//执行结果:输出 window ,alice
person.sayName();
4)给元素绑定的事件,事件触发的时候,被绑定到元素上的事件处理函数被执行的时候,函数的 this 关键字指向这个绑定事件的元素;
var oDiv = document.getElementsById("div1");
oDiv.onclick = fn;
function fn(){
console.log(this.id);//输出结果是 div1
}
如果上面都理解了,下面来看这个例子,加深下映像,看看是否都真正理解了 this 关键字:
var number = 2;
var obj = {
number: 4,
fn1: (function() {
this.number *= 2;//window.number =4
number = number * 2;//undefined
var number = 3;//number =3
return function() {
this.number *= 2;
number *= 3;
alert(number)
}
})(),
db2: function() {
this.number *= 2;
}
}
var fn1 = obj.fn1;
alert(number);
fn1();
obj.fn1();
alert(window.number);
alert(obj.number);
javascript 中的 this 关键字详解的更多相关文章
- JavaScript中return的用法详解
JavaScript中return的用法详解 最近,跟身边学前端的朋友了解,有很多人对函数中的this的用法和指向问题比较模糊,这里写一篇博客跟大家一起探讨一下this的用法和指向性问题. 1定义 t ...
- javascript中的this作用域详解
javascript中的this作用域详解 Javascript中this的指向一直是困扰我很久的问题,在使用中出错的机率也非常大.在面向对象语言中,它代表了当前对象的一个引用,而在js中却经常让我觉 ...
- JavaScript中this的用法详解
JavaScript中this的用法详解 最近,跟身边学前端的朋友了解,有很多人对函数中的this的用法和指向问题比较模糊,这里写一篇博客跟大家一起探讨一下this的用法和指向性问题. 1定义 thi ...
- javascript中=、==、===区别详解
javascript中=.==.===区别详解今天在项目开发过中发现在一个小问题.在判断n==""结果当n=0时 n==""结果也返回了true.虽然是个小问题 ...
- javascript 中合并排序算法 详解
javascript 中合并排序算法 详解 我会通过程序的执行过程来给大家合并排序是如何排序的... 合并排序代码如下: <script type="text/javascript& ...
- JavaScript中数组Array方法详解
ECMAScript 3在Array.prototype中定义了一些很有用的操作数组的函数,这意味着这些函数作为任何数组的方法都是可用的. 1.Array.join()方法 Array.join()方 ...
- C\C++中的 struct 关键字详解
struct关键字是用来定义一个新的类型,这个新类型里面可以包含各种其他类型,称为结构体. 1. 什么是结构体 结构体(struct)是一种自定义的数据类型,就是把一组需要在一起使用的数据元素组合成一 ...
- JavaScript中的async/await详解
1.前言 async函数,也就是我们常说的async/await,是在ES2017(ES8)引入的新特性,主要目的是为了简化使用基于Promise的API时所需的语法.async和await关键字 ...
- Javascript中prototype属性的详解
原文链接:http://www.cnblogs.com/Uncle-Keith/p/5834289.html 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象 ...
随机推荐
- java结合testng,利用XML做数据源的数据驱动示例
testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以XML为例: 备注:@DataProvider的返回值 ...
- 设计模式PHP篇(二)————工厂模式
一个很简单的工厂模式.代码如下: <?php interface Person { public function sex(); } class Man implements Person { ...
- Java web 强制301跳转
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); response.setHeader("Location" ...
- Kafka发布订阅消息
Maven <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-cli ...
- 【poj2409】Let it Bead Polya定理
题目描述 用 $c$ 种颜色去染 $r$ 个点的环,如果两个环在旋转或翻转后是相同的,则称这两个环是同构的.求不同构的环的个数. $r·c\le 32$ . 题解 Polya定理 Burnside引理 ...
- 题解 P1567 【统计天数】
天哪!竟然没人用优先队列! 小金羊又来水题了... 优先队列中的大根堆帮助我们把时间复杂度降到O(n+logn) 首先我们先了解一下大根堆... 大根堆的性质:根节点比子节点大, 这意味着最上面的节点 ...
- mysql索引长度的一些限制
一.myisam存储引擎 1. 数据库版本:阿里云RDS MySQL5.1 mysql> select @@version;+-------------------------------+| ...
- IBatis Map报错10.1
检查 providers.config 把没用的给关闭掉即可
- elk +redis 环境搭建
这个是最新的elk+redis搭建日志分析平台,今年时间是2015年9月11日. Elk分别为 elasticsearch,logstash, kibana 官网为:https://www.elast ...
- NOIP2010-2015后四题汇总
1.前言 正式开始的第一周的任务——把NOIP2010至NOIP2015的所有D1/2的T2/3写出暴力.共22题. 暴力顾名思义,用简单粗暴的方式解题,不以正常的思路思考.能够较好的保证正确性,但是 ...