当前位置: 首页 > news >正文

this指向了谁?

看函数在执行的时候是如何调用的,
 1 如果这个函数是用普通函数调用模式来进行调用,它内部的this指向了window;
 2 如果一个函数在调用的时候是通过对象方法模式来进行调用,则它内部的this就是我们的对象;
 3 如果一个函数在调用的时候通过构造函数模式调用,则它内部的this指向了生成的实例;
 4 如果这个函数是通过方法借用模式调用,则这个函数内部的this就是我们手动指定this

 

// 第1题
function Fn() {console.log(this);
}
Fn(); // window   普通函数调用模式
new Fn(); // {}   构造函数调用模式
Fn.apply(Fn); // Fn的函数体   方法借用模式// 第2题
var o = {f: function() {console.log(this);},2: function() {console.log(this);console.log(this.__proto__ === o[2].prototype);}
};
o.f(); // o   对象调用模式
o[2](); // o   对象调用模式
new o[2](); // {}   通过构造函数模式进行调用
o.f.call([1, 2]); // [1,2]   call方法进行方法借用
o[2].call([1, 2, 3, 4]); // [1,2,3,4]   call方法进行方法借用// 第3题
var name = "out";
var obj = {name: "in",prop: {name: "inside",getName: function() {return this.name;}}
};console.log(obj.prop.getName()); // 对象调用模式来进行调用  obj.prop.name,打印 'inside'
var test = obj.prop.getName; // 把test这个变量指向了obj.prop.getName所在的内存地址
console.log(test()); // 普通函数模式来进行调用,this指向window,打印 'out'
console.log(obj.prop.getName.apply(window)); // 方法借用模式,打印 'out'
console.log(obj.prop.getName.apply(this)); // 方法借用模式,打印 'out'
console.log(this === window); // true// 第4题
var length = 10;
function fn() {console.log(this.length);
}
var obj = {length: 5,method: function(f) {console.log(this);f(); // f在调用的时候是什么调用模式?普通函数调用模式  window.length,打印 10arguments[0](); // 通过什么模式来进行调用的。执行之前有[]和.就是对象调用模式。// arguments是一个类数组,也就是一个对象,就是通过arguments来进行调用的// 通过arguments对象进行调用,因此函数内部的this是 arguments// arguments.length实参的数量。实参长度是1,所以打印 1arguments[0].call(this);// 如果一个函数在调用的时候它前面有call和apply那么就肯定是方法借用模式调用// 调用method方法是通过obj.method 因此在这里的this就是 obj// 通过call方法把fn内的this指向了obj// 输出obj.length,打印 5}
};
obj.method(fn);// 第5题
function Foo() {getName = function() {console.log(1);};return this;
}
Foo.getName = function() {console.log(2);
};
Foo.prototype.getName = function() {console.log(3);
};
var getName = function() {console.log(4);
};
function getName() {console.log(5);
}
// 请写出以下输出结果:
Foo.getName(); // 2
getName(); // 4
Foo().getName(); // 1
getName(); // 1
new Foo.getName(); // 2
new Foo().getName(); // 3
new new Foo().getName(); // 3// 第6题
var obj = {fn: function() {console.log(this);}
};
obj.fn(); // obj
var f = obj.fn;
f(); // window
console.log(f === obj.fn); // true
// f和obj.fn是同一个函数,但是他们在调用的时候使用的函数调用模式不同,因此,它们内部的this指向也就不同。// 第7题
var arr = [function() {console.log(this);}
];
arr[0](); // 数组本身
// 数组也是一个复杂数据类型,也是一个对象,那用数组去调用函数,使用的模式就是对象方法调用模式。
function f() {console.log(this);
}
function fn() {console.log(arguments); // 类数组,也是就一个对象   [0:function f(){}]console.log(this); // windowarguments[0]();console.log(arguments[0]); // 内部的this就是arguments// 通过arguments对f这个方法进行调用,使用的是对象方法调用模式。
}
fn(f);// 第8题
function SuperClass() {this.name = "women";this.bra = ["a", "b"];
}
SuperClass.prototype.sayWhat = function() {console.log("hello");
};
function SubClass() {this.subname = "you sister";SuperClass.call(this);
}
var sub = new SubClass();
console.log(sub.sayWhat());

相关文章:

this指向了谁?

看函数在执行的时候是如何调用的, 1 如果这个函数是用普通函数调用模式来进行调用,它内部的this指向了window; 2 如果一个函数在调用的时候是通过对象方法模式来进行调用,则它内部的this就是我们的对象; 3 如果一个函数在调用的时候通过构…...

基于Resnet、LSTM、Shufflenet及CNN网络的Daily_and_Sports_Activities数据集仿真

在深度学习领域,不同的网络结构设计用于解决特定的问题。本文将详细分析四种主流网络结构:卷积神经网络(CNN)、残差网络(ResNet)、长短期记忆网络(LSTM)和洗牌网络(Shuff…...

mac系统vsCode中使用Better Comments在.vue文件里失效

问题:关于Better Comments默认在html、TS、JS中有效,在vue中无效,需要单独进行配置 windows系统可以参考友链Better Comments(注释高亮)在vue文件里失效的问题 关于Better Comments电脑的配置路径: Windows系统&…...

UE5.3 C++ Ceiusm中的POI 制作3DUI 结合坐标转化

一.核心思路WidgetComponent CesiumGloberAnchor 二.先制作POI 创建C Actor来制作,APOI。直接上代码 #pragma once#include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "CesiumGlobeAnchorComponent.h" #includ…...

一起学Git【第六节:查看版本差异】

git diff是 Git 版本控制系统中用于展示差异的强大工具。他可以用于查看文件在工作区、暂存区和版本库之间的差异、任意两个指定版本之间的差异和两个分支之间的差异等,接下来进行详细的介绍。 1.显示工作区与暂存区之间的差异 # 显示工作区和暂存区之间的差异,后面不加参数…...

numpy np.newaxis介绍

np.newaxis 是 NumPy 中用于增加数组维度的关键字。它的作用是为数组插入一个新的维度,从而改变数组的形状(shape)。 基本用法 np.newaxis 等价于 None,可以作为索引使用,用于在指定位置增加一个维度。增加的维度的大…...

小程序配置文件 —— 16 项目配置文件和配置 sass

目录 项目配置文件配置 sass 项目配置文件 在创建项目的时候,每个项目的根目录生成两个 config.json 文件(project.config.json 和 project.private.config.json ),用于保存开发者在工具上做的个性化配置,例如和编译有…...

【yolov5】实现FPS游戏人物检测,并定位到矩形框上中部分,实现自瞄

介绍 本人机器学习小白,通过语言大模型百度进行搜索,磕磕绊绊的实现了初步效果,能有一些锁头效果,但识别速度不是非常快,且没有做敌友区分,效果不是非常的理想,但在4399小游戏中爽一下还是可以…...

概率统计与随机过程--作业5

一、推导题 二、计算题 1、某单位为了研究太阳镜销售和广告费用之间的关系,搜集了以下数据,使用回归分析方法得到线性回归模型: 广告费用(万元)x 2 5 6 7 22 25 28 30 22 18 销售量(个&#xf…...

“802.11g”,“802.11n”,“802.11ac”,“802.11ax”

802.11g、802.11n、802.11ac、802.11ax都是IEEE制定的无线局域网(WLAN)标准,它们各自具有不同的特点和性能。以下是对这四个标准的详细介绍: 1. 802.11g 定义:802.11g是IEEE制定的一种无线局域网标准,它提…...

Kubernetes 常用的网络插件

上篇内容跟大家简单聊了k8s网络模型原理。分别围绕着容器、Pod、Service、网络策略等展开了详细的讲解。这次想跟大家聊聊k8s的CNI网络插件。 CNI 是 Kubernetes 网络模型的核心组件,它是一个插件接口,允许用户选择和配置网络插件来管理 Pod 的网络。CN…...

Retrofit和rxjava 实现窜行请求,并行请求,循环多次请求,递归请求,错误重试

在使用 Retrofit 和 RxJava 时,可以通过多种方式实现多次请求,比如串行请求、并行请求、依赖请求等。以下是一些常见的实现方式: 1. 串行请求(依赖关系) 一个请求的结果作为另一个请求的输入,可以用 flat…...

2025年度好用便签推荐,电脑桌面便签app分享

在快节奏的现代生活中,高效的时间管理和任务规划变得尤为重要。一款好用的便签软件不仅能帮助我们记录灵感、待办事项,还能极大地提升我们的工作效率。 在众多电脑桌面便签中,好用便签以其出色的桌面便签功能脱颖而出,备受用户青…...

【论文解读】Arbitrary-steps Image Super-resolution via Diffusion Inversion

级别:arXiv Computer Vision and Pattern Recognition(2024)作者:Zongsheng Yue,Kang Liao,Chen Change Loy时间:2024论文链接:Arbitrary-steps Image Super-resolution via Diffusion Inversion摘要 技术概述:该技术基于扩散反转,通过设计部分噪声预测策略来构建扩散…...

kkFileView集成springboot:使用自定义预览接口(非minio预览接口),发现无法预览资源

目录 1、背景2、原因分析3、解决办法 1、背景 按照项目验收要求,需要对minio中存储的数据进行加密 之前提供给kkFileView的预览地址都是获取的minio预览地址 由于minio中的资源进行了加密处理,所以我们自定义预览接口(进行解密操作&#xff…...

被裁20240927 --- 嵌入式硬件开发 STM32篇

人很容易原谅别人的错误但很难原谅别人的正确 1. 文档、手册、指南、资源2. MCU 结构3. MCU 和 MPU 的区别4. 一些概念什么是看门狗 ?什么是 DMA ?什么是晶振 ?什么是片内外设?软件协议、硬件协议、数据协议、通讯协议、通信协议u…...

留学生交流互动系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...

C/C++ 数据结构与算法【图】 图+邻接矩阵+邻接表+DFS+BFS+最小生成树+最短路径+拓扑排序详细解析【日常学习,考研必备】带图+详细代码

一、图的定义 1)无向图,有向图,完全图 2)稀疏图,稠密图,网,邻接,关联 3)度 4)路径 5)连通图 6)权与网 7)子图 8&#xff0…...

Linux实验报告7-文件管理

目录 一:实验目的 二:实验内容 (1)查看/etc/inittab文件的权限属性,并指出该文件的所有者以及文件所属组群。 (2)新建文件test,设置文件权限为r--r-----。 (3)新建文件test2,设系统中有用户study和用户组studygr…...

RJ45网口模块设计

1、以太网概述及RJ45实物 2、常用网口信号介绍 3、RJ45网口布局布线要点分析 4、总结 1、变压器下面需要进行挖空处理,以免底下的铜引入干扰,(将多边形挖空区域的所在层设置为Multi-Layer多层) 2、为了更直观的看一个类中线的长…...

从工具到生态:2026年建站系统深度解析与选型指南

在数字化转型已成为企业标配的今天,建立一个专业的官方网站,早已不是“有没有”的问题,而是“好不好用、能否支撑业务”的深层次考量。对于许多企业管理者、运营人员或创业者来说,“建站系统”这个词或许并不陌生,但当…...

OpenClaw网络配置:GLM-4.7-Flash在不同网络环境下的稳定连接方案

OpenClaw网络配置:GLM-4.7-Flash在不同网络环境下的稳定连接方案 1. 为什么网络配置如此重要? 去年冬天,我尝试用OpenClaw对接本地部署的GLM-4.7-Flash模型时,遇到了一个令人抓狂的问题:明明模型服务运行正常&#x…...

PS插件开发:LiuJuan20260223Zimage图像处理扩展

PS插件开发:LiuJuan20260223Zimage图像处理扩展 为Photoshop插上AI的翅膀,让图像处理更智能高效 1. 引言:当Photoshop遇见AI图像处理 作为一名长期与Photoshop打交道的设计师,你是否曾经遇到过这样的困扰:需要批量处理…...

MiniCPM-o-4.5-nvidia-FlagOS与Claude对比分析:在复杂推理任务上的差异化表现

MiniCPM-o-4.5-nvidia-FlagOS与Claude对比分析:在复杂推理任务上的差异化表现 最近在AI圈子里,关于不同模型在复杂推理任务上的表现,讨论得挺热闹的。特别是像MiniCPM-o-4.5-nvidia-FlagOS(后面简称MiniCPM)和Claude这…...

UDS诊断协议详解与测试实践

📊 UDS诊断协议详解与测试实践> 深入讲解UDS(Unified Diagnostic Services)诊断协议,包括服务详解、测试方法和实际案例分析。—## 一、UDS协议概述### 1.1 什么是UDSUDS(Unified Diagnostic Services,统…...

OpenClaw安全防护指南:GLM-4.7-Flash本地化部署的5个关键设置

OpenClaw安全防护指南:GLM-4.7-Flash本地化部署的5个关键设置 1. 为什么需要特别关注OpenClaw的安全配置? 去年夏天,我在调试一个自动整理财务报告的OpenClaw任务时,差点酿成大错。当时AI助手误将包含敏感信息的临时文件上传到了…...

SeqGPT-560M实现YOLOv8目标检测:智能图像分析实战

SeqGPT-560M实现YOLOv8目标检测:智能图像分析实战 1. 引言 在计算机视觉领域,目标检测一直是个核心且具有挑战性的任务。传统的YOLOv8模型虽然检测速度快、准确率高,但在处理复杂场景时,往往需要额外的语义理解能力来提升检测精…...

Qwen3.5-4B-Claude-Opus-GGUF保姆级教程:从零启动Web问答服务全流程

Qwen3.5-4B-Claude-Opus-GGUF保姆级教程:从零启动Web问答服务全流程 1. 模型与平台介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个基于Qwen3.5-4B的推理蒸馏模型,特别强化了结构化分析、分步骤回答以及代码与逻辑类问题的处理能力。…...

【信号处理实战】从原理到代码:手把手实现三次样条插值

1. 三次样条插值:从数学定义到生活场景 想象你正在用一根柔软的弹性尺子连接一组图钉,这些图钉固定在木板上代表你的数据点。这根尺子需要光滑地穿过每一个图钉,同时保持自然的弯曲形态——这就是三次样条插值要解决的问题。作为信号处理中最…...

AI辅助web开发新体验:让快马智能生成实时Markdown编辑器应用

今天想和大家分享一个特别实用的开发体验——用AI辅助快速构建一个实时Markdown编辑器。作为一个经常需要写技术文档的开发者,我一直希望能有个简洁高效的编辑器工具,这次尝试用InsCode(快马)平台的AI能力来实现这个需求,整个过程出乎意料的顺…...