特殊对象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. AI写程序:让Manus分析一个github项目生成一个官方网站

    提出问题,使用Manus帮我生成一个官方网站 提问: 我有一个github项目,是https://github.com/dependon/simple-image-filter ,请根据这个项目的内容 ...

  2. 在linux下QImage和QPixmap的内存泄漏和QPixmap线程安全问题

    在linux下QImage和QPixmap的内存泄漏和QPixmap线程安全问题 为什么不在线程里面使用QPixmap(path),而是使用QPixmap::fromImage(QImage(path ...

  3. 【中文】【吴恩达课后编程作业】Course 4 - 卷积神经网络 - 第三周作业

    [中文][吴恩达课后编程作业]Course 4 - 卷积神经网络 - 第三周作业 - 车辆识别 上一篇:[课程4 - 第三周测验]※※※※※ [回到目录]※※※※※下一篇:[课程4 - 第四周测验] ...

  4. HarmonyOS运动开发:打造你的专属运动节拍器

    ##鸿蒙核心技术##运动开发##Media Kit(媒体服务)# 前言 在运动过程中,保持稳定的节奏对于提升运动效果至关重要.无论是跑步.骑自行车还是进行高强度间歇训练(HIIT),一个精准的节拍器都 ...

  5. 题解:CF1045I Palindrome Pairs

    题目链接:link. 首先上思路: 如果一个字符串是回文串,只有当其中最多的只有一个字符的出现次数是奇数. 注意我们可以将每个字符串的字符出现次数的奇偶性用一个 \(26\) 位的二进制表示. 接下来 ...

  6. 基于 Spread,在 Blazor 框架中导入 / 导出 Excel

    引言 在现代 Web 应用开发中,处理 Excel 文件的导入和导出是一项常见且重要的需求.Blazor 框架是微软推出的用于构建具有 .NET 强大功能的交互式客户端 Web UI 的相对较新的框架 ...

  7. HyperWorks的四面体网格剖分

    HyperMesh 向用户提供了若干种生成四面体网格的方法.标准四面体网格剖分(Standard Tetramesh)基于一个已有的封闭壳单元包络而成的空间,在合理设置参数的基础上生成四面体网格.标准 ...

  8. idea maven 打包错误 [ERROR] javac options source files

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-c ...

  9. array_map函数在PHP类中调用内部方法简介

    http://www.dangkai.com/ArticlePage/Article21339.htm

  10. 常见php正则表达式

    $str=preg_replace("/\s+/", " ", $str); //过滤多余回车 $str=preg_replace("/<[ ] ...