js函数中的this
特殊对象this
一、标准函数中,this引用的是把函数当成方法调用的上下文对象
window.color = 'red';
let o={
color:'blue'
}
function sayColor(){
console.log(this.color);
}
sayColor(); // red
o.sayColor=sayColor;
o.sayColor(); //blue
定义在全局上下文中的函数sayColor()引用了this对象。这个this到底引用了哪个对象必须到函数被调用时才能确定。因此这个值在函数执行过程中可能会变。如果在全局上下文中调用sayColor(),结果输出red, 因为this指向window,而this.color相当于window..color.而再把sayColor()赋值给o之后,在调用o.sayColor(); this会指向o,即this.color相当于o.color,所以会显示blue
二、箭头函数中,this引用的是定义箭头函数的上下文
window.color = 'red';
let o={
color:'blue'
}
function sayColor=()=>{
console.log(this.color);
}
sayColor(); // red
o.sayColor=sayColor;
o.sayColor(); //red
在对sayColor()的两次调用中,this引用的都是window对象,因为这个箭头函数是在window上下文中定义的
三、在事件回调或定时回调中调用某个函数,this值指向的并非想要的对象。此时可以将回调函数写成箭头函数就可以解决问题
function king(){
this.royaltyName='henry';
setTimeout(
()=>{
console.log(this.royaltyName,1000);
})
}
function queen(){
this.royaltyName='elizabeth';
setTimeout(
function(){
console.log(this.royaltyName,1000);
})
}
new King();// henry
new Queen();//undefined
因为箭头函数中的this会保留定义该函数时的上下文
js函数中的this的更多相关文章
- 在JS函数中执行C#中的函数、字段
1.调用字段 cs文件的代码: ; protected void Page_Load(object sender, EventArgs e) { id = ; } js页面的代码: function ...
- js函数中获得当前被点击元素
问题描述:在html页面中点击<a>或者’按钮‘,进入js中的函数,在js函数中获得被点击那个<a>或‘按钮’元素 解决方法:方法一: html中: <a>标签:& ...
- js函数中this的不同含义
1.js函数调用过程中,js线程会进入新的执行环境并创建该环境的变量对象,并添加两个变量:this和arguments,因此可以在函数中使用这两个变量.需要注意的是,this变量不能重新赋值,而arg ...
- js函数中参数的传递
数据类型 在 javascript 中数据类型可以分为两类: 基本类型值 primitive type,比如Undefined,Null,Boolean,Number,String. 引用类型值,也就 ...
- js函数中的BOM和DOM
BOM 浏览器对象模型 screen对象 console.log(screen.width);// 屏幕宽度 console.log(screen.height);// 屏幕高度 console.l ...
- 深入理解JS函数中this指针的指向
函数在执行时,会在函数体内部自动生成一个this指针.谁直接调用产生这个this指针的函数,this就指向谁. 怎么理解指向呢,我认为指向就是等于.例如直接在js中输入下面的等式: console.l ...
- 将从model中获得的数据传到js函数中
刚遇到了一种情况,从controller中获得的model是一个集合,需要将这个集合循环放到标签中,并且需要为这些标签添加点击事件,每个值传入对应的点击事件函数中,由于model中的值是通过${ite ...
- js函数中的this关键字
关于这个this关键字,也是很多项目中常常被用到的,那么,有人也许会问,干嘛要用this呢,在函数被调用时,直接指明是什么对象在调用不就行了?还整那么个模模糊糊的概念出来干嘛?不过嘛,存在即真理,既然 ...
- js 函数中的this
资料 function 函数 没有"this"的持久概念, 调用函数时,创建this function hello(thing) { console.log(this + &quo ...
- js函数中写默认值的几种方式(常见的)
<script> <!--第一种写法,我更喜欢第一种写法直观一些--> function Person(name){ this.name = name || '默认名字乔丹'; ...
随机推荐
- linux下使用动态壁纸
让你的linux桌面动起来(幻梦动态壁纸) 我也是突发奇想,做了这么一个程序,目前在多个linux下可以运行,支持双屏 理论上说支持mpv >=29.0 qt>=5.8.0的系统版本 ub ...
- File与IO流之字节流
FileOutputStream 创建字节输出流对象FileOutputStream fl =new FileOutputStream() 传入的参数可以是字符串路径或者File对象(实际上如果传入字 ...
- Spring注解之@Autowired:按类型自动装配Bean到数组、集合和Map
在Spring Boot项目中,如何把某些接口的多个实现类的Bean注入到Arrays, java.util.Collection 和 java.util.Map类型的变量中,方便应用的时候直接读取? ...
- Django Web应用开发实战附录A
Django面试题 1.Python解释器有哪些类型,有什么特点? CPython:由C语言开发,而且使用范围最广泛IPython:基于CPython的一个交互式计时器PyPy:提高执行效率,采用JI ...
- Django Web应用开发实战第四章
一.设置响应方式 网站的运行原理遵从HTTP协议,分为HTTP请求和HTTP响应.HTTP响应也称为状态码,分为5种状态:消息.成功.重定向.请求错误和服务器错误.若以使用频率划分,HTTP状态码分为 ...
- 从零开始学Flink:揭开实时计算的神秘面纱
一.为什么需要Flink? 当你在电商平台秒杀商品时,1毫秒的延迟可能导致交易失败:当自动驾驶汽车遇到障碍物时,10毫秒的计算延迟可能酿成事故.这些场景揭示了一个残酷事实:数据的价值随时间呈指数级衰减 ...
- pytorch入门 - AlexNet神经网络
AlexNet背景 AlexNet是2012年由Alex Krizhevsky.Ilya Sutskever和Geoffrey Hinton提出的深度卷积神经网络架构. 它在ImageNet大规模视觉 ...
- 保姆级教程!玩转 ChunJun 详细指南
ChunJun是一款稳定.易用.高效.批流一体的数据集成框架,⽀持海量数据的同步与计算.ChunJun 既可以采集静态的数据,比如 MySQL,HDFS 等,也可以采集实时变化的数据,比如 binlo ...
- 袋鼠云数栈基于CBO在Spark SQL优化上的探索
原文链接:袋鼠云数栈基于CBO在Spark SQL优化上的探索 一.Spark SQL CBO选型背景 Spark SQL的优化器有两种优化方式:一种是基于规则的优化方式(Rule-Based Opt ...
- About me and the blog
About me and the blog About me 坐标\(CQ\),可以叫我\(Luoyu\)/洛雨/呆猫(似乎混入了奇怪的东西,时常模仿呆猫说话故而得名)/猫老大(???不知道啥时候下一 ...