特殊对象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的更多相关文章

  1. 在JS函数中执行C#中的函数、字段

    1.调用字段 cs文件的代码: ; protected void Page_Load(object sender, EventArgs e) { id = ; } js页面的代码: function ...

  2. js函数中获得当前被点击元素

    问题描述:在html页面中点击<a>或者’按钮‘,进入js中的函数,在js函数中获得被点击那个<a>或‘按钮’元素 解决方法:方法一: html中: <a>标签:& ...

  3. js函数中this的不同含义

    1.js函数调用过程中,js线程会进入新的执行环境并创建该环境的变量对象,并添加两个变量:this和arguments,因此可以在函数中使用这两个变量.需要注意的是,this变量不能重新赋值,而arg ...

  4. js函数中参数的传递

    数据类型 在 javascript 中数据类型可以分为两类: 基本类型值 primitive type,比如Undefined,Null,Boolean,Number,String. 引用类型值,也就 ...

  5. js函数中的BOM和DOM

    BOM 浏览器对象模型  screen对象 console.log(screen.width);// 屏幕宽度 console.log(screen.height);// 屏幕高度 console.l ...

  6. 深入理解JS函数中this指针的指向

    函数在执行时,会在函数体内部自动生成一个this指针.谁直接调用产生这个this指针的函数,this就指向谁. 怎么理解指向呢,我认为指向就是等于.例如直接在js中输入下面的等式: console.l ...

  7. 将从model中获得的数据传到js函数中

    刚遇到了一种情况,从controller中获得的model是一个集合,需要将这个集合循环放到标签中,并且需要为这些标签添加点击事件,每个值传入对应的点击事件函数中,由于model中的值是通过${ite ...

  8. js函数中的this关键字

    关于这个this关键字,也是很多项目中常常被用到的,那么,有人也许会问,干嘛要用this呢,在函数被调用时,直接指明是什么对象在调用不就行了?还整那么个模模糊糊的概念出来干嘛?不过嘛,存在即真理,既然 ...

  9. js 函数中的this

    资料 function 函数 没有"this"的持久概念, 调用函数时,创建this function hello(thing) { console.log(this + &quo ...

  10. js函数中写默认值的几种方式(常见的)

    <script> <!--第一种写法,我更喜欢第一种写法直观一些--> function Person(name){ this.name = name || '默认名字乔丹'; ...

随机推荐

  1. 洛谷 P6006 [USACO20JAN]Farmer John Solves 3SUM G

    洛谷 P6006 [USACO20JAN]Farmer John Solves 3SUM G Problem 什么是3-SUM? 给你一个序列\(a\),求有多少组\((i,j,k)(1\le i&l ...

  2. 【语义分割专栏】3:Segnet原理篇

    目录 前言 背景介绍 Segnet核心剖析 池化索引(pooling Indices) 其他细节 编码器解码器的对称结构 Segnet模型代码 结语 参考资料 前言 本篇文章收录于语义分割专栏,如果对 ...

  3. java里面的高精度运算

    1 package com.lv.study.am.first; 2 3 import java.math.BigDecimal; 4 5 public class TestBigDecimal { ...

  4. 使用 .NET Core+GcExcel,生成 Excel 文件

    引言 在当今数字化办公和数据处理的大环境下,在线生成 Excel 文件成为了许多企业和开发者的需求..NET Core 作为一个跨平台的开源框架,具有高效.灵活等特点,而 GcExcel 是一款功能强 ...

  5. HyperWorks二维网格划分与单元连续性

    自动网格划分 HyperWorks中为零件定义几何曲面是创建零件壳单元网格的最佳方式.HyperMesh 创建二维网格最有效的方法是使用 Automesh 面板直接在零件的表面创建网格. Autome ...

  6. vscode GDB远程调试安卓

    如果是比较新的android ndk的版本,建议使用lldb进行调试,参考:vscode lldb远程调试 - OpenFDE - OpenFDE Docs,将lldbserver push到移动端, ...

  7. JavaScript的"数值计算困局":生态缺位下的破局之路

    本文原创首发于公众号[我做开发那些年]与网站[乔文小屋],现同步转载至本平台,点击阅读原文 声明:如需转载本文至其他平台,请注明文章来源及公众号信息,感谢您对原创内容的尊重与支持! *背景*:最近在尝 ...

  8. 10.Java Spring框架源码分析-IOC-实例化所有非懒加载的单实例bean

    目录 1. 要研究的代码 2. 实例化所有非懒加载的单实例bean 2.1. 获取所有BeanName,一个个创建 2.2. 创建单个bean 2.3. 看看之前创建bean有木有,没有再去创建[不是 ...

  9. C# 对字符串进行UrlEncode/UrlDecode

    https://www.cnblogs.com/li150dan/p/13492280.html //对字符进行UrlEncode编码 string text= System.Web.HttpUtil ...

  10. h5/react表格元素拖动交换ondrop

    先看效果 再看代码utils.js import Mock from 'mockjs'; // mock老师们数据 const data = Mock.mock({ 'list|10-40': [{ ...