JS中this的几种情况
1.给元素的某个事件行为绑定方法,事件触发,方法执行,此时方法中的this一般都是当前元素本身:
<div id="div"></div>
div.onclick = function() {
console.log(this); //=><div id="div"></div>
};
div.addEventListener('click', function () {
console.log(this); //=><div id="div"></div>
}, false);
这里边有个特殊情况就是DOM2级绑定事件
div.attachEvent('onclick',function anonymous(){
console.log(this); //=>window
});
2.普通函数执行,它里边的this是谁,取决于方法执行前面是否有“.”,有的话,“.”前面是谁this就是谁,没有的话并且是在非严格模式下this就是window,严格模式下是undefined:
function fn() {
console.log(this);
}
let obj = {
name: 'OBJ',
fn: fn
};
fn(); //window
obj.fn(); //{name: 'OBJ',fn: fn}
3.构造函数执行(也即是new执行),函数中的this是当前类的实例:
function F() {
console.log(this);
}
let f = new F; // F {}
4.箭头函数中没有this,所用到的this都是其上下文中的this(或者说是上级上下文):
let obj = {
fn: () => {
console.log(this);
}
}
obj.fn(); //window
let obj = {
fn: function () {
setTimeout(_ => {
console.log(this);
}, 1000);
}
};
obj.fn(); //obj
5.基于call/apply/bind可以改变函数中this的指向:
let obj = {
fn: function(){
console.log(this);
}
}
obj.fn(); //obj
obj.fn.call(12); //
JS中this的几种情况的更多相关文章
- js中undefined的几种情况
1.变量声明且没有赋值: 2.获取对象中不存在的属性时: 3.函数需要实参,但是调用时没有传值,形参是undefined: 4.函数调用没有返回值或者return后没有数据,接收函数返回的变量是und ...
- js中this的四种使用方法
0x00:js中this的四种调用模式 1,方法调用模式 2,函数调用模式 3,构造器调用模式 4,apply.call.bind调用模式 0x01:第一种:方法调用模式 (也就是用.调用的)this ...
- 【温故知新】——原生js中常用的四种循环方式
一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0 网页输出“欢迎下次光临” 在网页中弹出框输入1 网页输出“查询中……” 在 ...
- JS 中深拷贝的几种实现方法
JS 中深拷贝的几种实现方法1.使用递归的方式实现深拷贝 //使用递归的方式实现数组.对象的深拷贝 function deepClone1(obj) { //判断拷贝的要进行深拷贝的是数组还是对象,是 ...
- JS中常见的几种报错类型
1.SyntaxError(语法错误) 解析代码时发生的语法错误 var 1a; //Uncaught SyntaxError: Invalid or unexpected token 变量名错误 c ...
- js内存泄露的几种情况
想解决内存泄露问题,必须知道什么是内存泄露,什么情况下出现内存泄露,才能在遇到问题时,逐个排除.这里只讨论那些不经意间的内存泄露. 一.什么是内存泄露 内存泄露是指一块被分配的内存既不能使用,又不能回 ...
- js中函数传参的情况
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Js内存泄漏的几种情况
想解决内存泄露问题,必须知道什么是内存泄露,什么情况下出现内存泄露,才能在遇到问题时,逐个排除.这里只讨论那些不经意间的内存泄露. 一.什么是内存泄露 内存泄露是指一块被分配的内存既不能使用,又不能回 ...
- c++中vector向量几种情况的总结(向量指针,指针的向量)
1.标准库vector类型 vector 是同一种类型的对象的集合.每一个对象都有一个相应的整数索引值.标准库将负责管理与存储元素相关的内存.我们把 vector 称为容器,是由于它能够包括其它对象. ...
随机推荐
- [bzoj4873] [洛谷P3749] [Shoi2017] 寿司餐厅
Description Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序提供n种寿司,第i种寿司有一个 代号ai和美味度di,i,不同种类的寿司有可能使用相同的代号.每种寿 ...
- centos7的新特性
1.修改主机名方式改变 centos6在/etc/ centos7使用命令hostnamectl set-hostname 主机名2.修改时间方式改变3.查看IP地址ifconfig不再支持改用ip4 ...
- Doxygen -- part 2
Documenting the code 这个章节涵盖两个主题: 如何在你的代码中放置注释, 一遍doxygen可以在生成的文档中囊括它们. 如何组织一个注释块的内容, 以使得输出美观. 特殊注释块 ...
- [CF1192B]动态直径
题意 给一棵固定形态的树,边有边权,每次修改一条边权,在线求出修改后树的直径. 思考 写出树的全dfs序.生成方式为:每当一个点进栈或入栈时,记录它的编号. 考虑这个dfs序上两点之间的距离.设某个节 ...
- CSS-09-背景属性
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- BaseAdapter的三种表达式分析,startActivityForResult的使用
(一)BaseAdapter的三种表达式: ①逗比式: public View getView(int position, View convertView, ViewGroup parent) { ...
- 1755: N相关孪生素数
#include<stdio.h>int f(int n,int L,int R){ int ch[10000],i,j,count=0; j=1; for(i=L;i<=R;i++ ...
- MQTT协议的学习
MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议.它的设计思想是轻巧.开放.简单.规范,易于实现.这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M ...
- 使用CStatic显示图片(bmp、ico、png)
一.显示bmp及ico //h文件 CStatic m_static; //cpp文件 CBitmap bitmap; bitmap.LoadBitmapW(IDB_BITMAP); //加载位图 B ...
- CodeIgniter框架使用总结
CodeIgniter框架 1.回忆MVC 1.1.M:模型,提供数据,保存数据 1.2.V:视图,只负责显示,表单form 1.3.C:控制器,协调模型和视图 1.4.action:动作,是控制器中 ...