call、apply、bind应用题型

这道题,考察的是修改this指向,延申到call,apply和bind的作用和区别。

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><style>/* 填写样式 */</style>
</head><body><!-- 填写标签 --><script type="text/javascript">// 填写JavaScriptfunction bindThis(f, oTarget) {   //题目要求我们封装函数f,所以返回的是一个function,封装后的freturn function(){//函数的call方法指定函数内部this的指向return f.call(oTarget,...arguments)//也可以使用apply,如下//return f.apply(oTarget,arguments)}//或者使用bind(bind函数返回的就是一个function),直接绑定this指向//return f.bind(oTarget)}</script>
</body></html>

使用call,apply和bind都可以通过这道题。

1.使用call:

call是函数改变this指向的一个方法,题目要求我们封装函数f,所以返回的是一个function,封装后的f,所以在方法中要返回一个function

function bindThis(f, oTarget) {   return function(){return f.call(oTarget,...arguments)}}

(注意这里的参数调用方法)

2.使用apply 

同理,和call的区别是参数调用是传入一个数组,参数调用方法不一样。

function bindThis(f, oTarget) {   return function(){return f.apply(oTarget,arguments)}}

(注意这里的参数调用方法)

3.使用bind

函数的bind方法返回的是一个function,所以直接返回bind结果即可。

function bindThis(f, oTarget) {   //使用bind(bind函数返回的就是一个function),直接绑定this指向return f.bind(oTarget)  }

这里多说一句,总结一下考察点: call,apply和bind的作用和区别

call、apply和bind都是JavaScript中Function对象的原型方法,它们的主要作用是改变函数的执行call、apply和bind都是JavaScript中Function对象的原型方法,它们的主要作用是改变函数的执行上下文,即修改函数运行时的this指向

三者之间的主要区别体现在以下几个方面:

1. 传参方式不同:call和bind采用的是列表传参,而apply则可以接受数组或伪数组作为参数。

2. 执行机制有所区别:call和apply是一次性传入参数并立即执行,而bind则是返回绑定了特定this之后的函数,可以在以后的某个时间点进行调用。

3. 应用场景不同:例如,当我们需要在一个对象的方法中使用另一个对象的属性时,就可以利用call、apply或bind来改变方法内部的this指向。

应用场景不同,这里我们用一个例子来辅助理解。

假设我们有一个Person对象和一个sayHello方法,我们希望在调用sayHello方法时,能够将当前对象作为this传入到方法中。

function Person(name) {this.name = name;
}Person.prototype.sayHello = function() {console.log('Hello, my name is ' + this.name);
};

现在,我们想要在一个名为john的Person对象上调用sayHello方法,并将当前对象作为this传入到方法中。我们可以使用call、apply或bind来实现这个需求。

1. 使用call:

var john = new Person('John');
john.sayHello.call(john); // 输出:Hello, my name is John

2. 使用apply:

var john = new Person('John');
john.sayHello.apply(john); // 输出:Hello, my name is John

3. 使用bind:

var john = new Person('John');
var boundSayHello = john.sayHello.bind(john);
boundSayHello(); // 输出:Hello, my name is John

在这个例子中,我们可以看到,无论是使用call、apply还是bind,都可以实现将当前对象作为this传入到方法中的目的。

但是,它们的应用场景略有不同:

- call和apply通常用于需要立即执行函数的场景,而bind则通常用于需要将函数绑定到某个对象上,并在以后的某个时间点进行调用的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/583107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

连接GaussDB(DWS)报错:Invalid or unsupported by client SCRAM mechanisms

用postgres方式连接GaussDB(DWS)报错&#xff1a;Invalid or unsupported by client SCRAM mechanisms 报错内容 [2023-12-27 21:43:35] Invalid or unsupported by client SCRAM mechanisms org.postgresql.util.PSQLException: Invalid or unsupported by client SCRAM mec…

MySQL进阶之(一)逻辑架构

一、逻辑架构 1.1 逻辑架构剖析1.1.1 连接层1.1.2 服务层01、基础服务组件02、SQL Interface&#xff1a;SQL 接口03、Parser&#xff1a;解析器04、Optimizer&#xff1a;查询优化器05、Caches & Buffers&#xff1a; 查询缓存组件 1.1.3 引擎层1.1.4 存储层1.1.5 总结 1.…

GoLand for mac 2023.3.2 Go语言开发集成环境

GoLand 是 JetBrains 公司开发的一款专业的 Go 语言集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了许多强大的功能来提高 Go 语言开发者的生产力和代码质量。 一、概述 GoLand 是基于 IntelliJ 平台构建的&#xff0c;继承了 IntelliJ IDEA 的强大功能和稳定性…

【2023】通过docker安装hadoop以及常见报错

&#x1f4bb;目录 1、准备2、安装镜像2.1、创建centos-ssh的镜像2.2、创建hadoop的镜像 3、配置ssh网络3.1、搭建同一网段的网络3.2、配置host实现互相之间可以免密登陆3.3、查看是否成功 4、安装配置Hadoop4.1、添加存储文件夹4.2、添加指定配置4.3、同步数据 5、测试启动5.1…

使用自带密钥 (BYOK) 的Azure信息保护云退出

上篇我们讲了使用Microsoft托管密钥的Azure信息保护云退出&#xff0c;本文我们将介绍使用自带密钥 (BYOK) 的Azure信息保护云退出。 自带密钥 (BYOK) 由客户在 nCipher HSM 中创建&#xff0c;并安全地传输到基于 HSM 的 Azure Key Vault&#xff0c;供 AIP 使用。 由于 Micro…

SeaTunnel同步PostgreSQL数据至ClickHouse(1)

ClickHouse简介 ClickHouse最初是为Yandex.Metrica世界第二大Web分析平台而开发的。多年来一直作为该系统的核心组件被该系统持续使用着。目前为止&#xff0c;该系统在ClickHouse中有超过13万亿条记录&#xff0c;并且每天超过200多亿个事件被处理。它允许直接从原始数据中动…

基于element ui封装table组件

效果图&#xff1a; 1.封装表格代码如下 <template> <div><div class"TableList"><el-tablev-loading"loading"selection-change"selectionChange"class"table":data"tableData":border"hasBorde…

【2023年中国高校大数据挑战赛 】赛题 B DNA 存储中的序列聚类与比对 Python实现

【2023年中国高校大数据挑战赛 】赛题 B DNA 存储中的序列聚类与比对 Python实现 1 题目 赛题 B DNA 存储中的序列聚类与比对 近年来&#xff0c;随着新互联网设备的大量涌入和对其服务需求的指数级增长&#xff0c;越来越多的数据信息被产生与收集。预计到 2021 年&#xf…

如何手动升级Chrome插件/Chrome扩展程序?

Chrome 浏览器的插件&#xff08;也称为扩展&#xff09;通常会自动更新到最新版本。这是因为 Chrome 会定期检查并下载来自 Chrome 网上应用店的扩展更新。然而&#xff0c;如果你需要手动更新扩展&#xff0c;可以按照以下步骤操作&#xff1a; 打开 Chrome 浏览器。点击浏览…

.Net FrameWork总结

.Net FrameWork总结 介绍.Net公共语言运行库CLI的组成.NET Framework的主要组成.NET Framework的优点CLR在运行期管理程序的执行&#xff0c;包括以下内容CLR提供的服务FCL的组成 或 服务&#xff08;这个其实就是我们编码时常用到的类库&#xff09;&#xff1a;&#xff08;下…

408数据结构常考算法基础训练

408相关&#xff1a; 408数据结构错题知识点拾遗 408数据结构常考算法基础训练 408计算机组成原理错题知识点拾遗408操作系统错题知识点拾遗等待完善408计算机网络错题知识点拾遗 408计算机网络各层协议简记等待完善 该训练营为蓝蓝考研&#xff08;蓝颜知己&#xff09;的算…

Python漂浮爱心完整代码

文章目录 环境需求完整代码详细分析环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.blog.csdn.net/arti…

【PXIE301-208】基于PXIE总线架构的Serial RapidIO总线通讯协议仿真卡

板卡概述 PXIE301-208是一款基于3U PXIE总线架构的Serial RapidIO总线通讯协议仿真卡。该板卡采用Xilinx的高性能Kintex系列FPGA作为主处理器&#xff0c;实现各个接口之间的数据互联、处理以及实时信号处理。板卡支持4路SFP光纤接口&#xff0c;支持一个PCIe x8主机接口&…

不同SqlServer版本的Jdbc驱动下载地址

不同SqlServer版本的Jdbc驱动下载地址 1.下载地址 发行说明 - JDBC Driver for SQL Server | Microsoft Learn 版本兼容性查看 支持矩阵 - JDBC Driver for SQL Server | Microsoft Learn 建议方法查看 SQL 版本兼容性 Java 和 JDBC 规格支持 2.下载驱动 下面是2008版本对应…

写一个工具类能够让所有的建筑物体检测地面并且吸附地面

直接上代码 using UnityEditor; using UnityEngine; using System.Collections.Generic; using System.IO; using OHGame; using Unity.VisualScripting;public class OHEditorTool : Editor {[MenuItem("OHGame/Tools/行动区域点落地")]private static void GetObj…

element el-table实现可进行横向拖拽滚动

【问题】表格横向太长&#xff0c;表格横向滚动条位于最底部&#xff0c;需将页面滚动至最底部才可左右拖动表格&#xff0c;用户体验感不好 【需求】基于elment的el-table组件生成的表格&#xff0c;使其可以横向拖拽滚动 【实现】灵感来源于这篇文章【Vue】表格可拖拽滚动&am…

Linux 线程概念

文章目录 前言线程的概念线程的操作操作的原理补充与说明 前言 ① 函数的具体说明被放在补充与说明部分 ② 只说些基础概念和函数使用 线程的概念 网络回答&#xff1a;Linux 线程是指在 Linux 操作系统中创建和管理的轻量级执行单元。线程是进程的一部分&#xff0c;与进程…

flutter 安卓使用高德插件黑屏

地址 https://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project 下面介绍的方式是Native配置 sdk&#xff0c;也就是需要手动下载到本地在引入的方式 1、添加 jar 文件&#xff1a; 将下载的地图 SDK 的 jar包复制到工程&#xff08;此处截…

2702 高级打字机

因为Undo操作只能撤销Type操作&#xff0c;所以Undo x 实际上就是删除文章末尾x个字母。用一个栈即可解决&#xff08;每个字母最多进出一次&#xff09;。 这种情况下只需要设计一个合理的数据结构依次执行操作即可。 版本树&#xff1a;Undo x撤销最近的x次修改操作&#xf…

将正规文法转化为正规式

将正规文法转化为正规式有以下几个规则&#xff1a; 通过一道例题来讲解&#xff1a; ①A-->aC|bA ②C-->bD ③D-->aC|bD| (1)首先将②带入③&#xff08;不能将自身带入自身例如D-->aC|bD|,文法中带D&#xff0c;不能带入D&#xff09; DabD|bD|&#xff08;…