js bind函数

一、bind函数的作用

bind() 函数是 JavaScript 中的一个方法,它用于创建一个新的函数,并将指定的对象作为新函数的执行上下文(也就是 this 关键字所引用的对象)。bind() 方法不会立即执行函数,而是返回一个新函数,你可以随后调用这个新函数。这个新函数会以指定的对象作为 this,并且可以预先设置一些参数。

总结一下 bind() 的作用:

  1. 改变函数的执行上下文(this 指向): 可以将函数绑定到指定的对象上,确保函数在执行时的上下文是你指定的对象,而不是调用时的上下文。

  2. 创建偏函数(Partial Function): 可以预先设置函数的参数,生成一个新的函数,这个新函数会在调用时将预先设置的参数与后续传入的参数合并,然后执行原函数。

bind() 方法在实际开发中经常用于确保函数在执行时具有确定的上下文,以及创建偏函数来减少重复的代码。

二、bind示例

const obj = {x: 42,getX: function() {return this.x;}
};
console.log(obj.getX()); // 输出结果42
console.log(obj.getX);// 输出结果// ƒ() {//     return this.x;// }
const unboundGetX = obj.getX;
console.log(unboundGetX()); // 这里的 this 将指向全局对象(在浏览器环境中通常是 window),输出 undefinedconst boundGetX = unboundGetX.bind(obj);
console.log(boundGetX()); // 使用 bind() 方法将 this 绑定到 obj 上,输出 42

在这个例子中,obj 对象有一个 getX 方法,用于返回 x 属性的值。

function() {return this.x}是一个函数表达式,将函数表达式存储在变量后,变量也可作为一个函数,因此obj.getX的输出结果是函数表达式的声明,该函数并没有被执行;obj.getX()时才调用了该匿名函数,由于此时是在obj内部被调用,因此输出结果为42. 

同理,obj对象的getX变量存储了函数表达式,现在我们将getX变量赋值给了unboundGetX变量,那么unboundGetX变量现在同样存储了函数表达式,因此,当 getX 方法被直接调用时(unboundGetX()),它的上下文是全局对象,因此无法找到 x 属性,导致返回 undefined

但是,通过 bind() 方法,我们创建了一个新的函数 boundGetX,并将其上下文绑定到 obj 对象,因此调用 boundGetX() 将会返回正确的值 42

bind() 方法还可以接受额外的参数,在调用新函数时将其传递给原始函数。例如:

function greet(greeting, punctuation) {return greeting + ' ' + this.name + punctuation;
}const obj = {name: 'John'
};const boundGreet = greet.bind(obj, 'Hello');
console.log(boundGreet('!')); // 输出 "Hello John!"

在这个例子中,greet 函数有两个参数:greetingpunctuation。通过 bind() 方法,我们将 obj 对象绑定为新函数的上下文,并且预先设置了 greeting 参数为 'Hello'。当我们调用 boundGreet('!') 时,实际上是调用了 greet 函数,并将 'Hello' 作为第一个参数传递给它,然后再加上 '!',返回最终的字符串 "Hello John!"

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

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

相关文章

消息队列-kafka-服务端处理架构(架构,Topic文件结构,服务端数据的一致性)

服务端处理架构 资料来源于网络 网络线程池: 接受请求,num.network.threads,默认为 3,专门处理客户的发送的请求。 IO 线程池: num.io.threads,默认为 8,专门处理业务请求。也就是它不负责发…

JetBrains TeamCity 身份验证绕过漏洞(CVE-2024-27198)

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

刷题DAY9 | LeetCode 28-实现 strStr() 459-重复的子字符串

28-实现 strStr()(easy) 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 思路…

【软件工程】介绍

软件工程 软件工程是一门应用计算机科学、数学和工程原则来设计、开发、维护和测试软件的学科。软件工程着重于创建质量高效、可靠、可使用、可维护和快速开发的系统。这个领域从20世纪60年代初开始蓬勃发展,主要是为了解决软件危机,即随着计算机和软件…

剑指offer--c++--n个骰子的点数

目录 题目: 题目分析: 最后编写代码: 输出结果 题目: 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 感谢大佬的帮助:https://www.cnblogs.c…

了解处理器

了解处理器 摘要写在前面1. 计算机简介1.1.计算机发展简史1.2.计算机分类1.3.PC机结构 2.初识处理器2.1.处理器的硬件模型2.2.处理器的编程模型2.3.处理器的分层模型2.4.如何选择处理器 3.指令集体系结构3.1.处理器编程模型3.2.指令集发展历程3.3.指令集分类3.4.汇编语言格式3.…

商业数据增长超88%!小红书热门内容解析,用户“打卡”新玩法

长久以来,“打卡”在社交媒体盛行,频频涌现新风潮,几乎覆盖美食、旅游、美妆等众多热门行业,今天吃了什么、玩了什么、做了什么?大众都喜欢通过打卡来分享。特别是小红书平台,打卡内容热度经久不衰&#xf…

13 丢弃法dropout【李沐动手学深度学习v2笔记】

1. 丢弃法 在层之间加入随机噪音 加入噪音的一些规则 加入噪音后不要改变期望 使用丢弃法 推理中的丢弃法 总结 2. 代码实现 4.6. 暂退法(Dropouthttps://zh.d2l.ai/chapter_multilayer-perceptrons/dropout.html 2.1 Dropout import torch from torch import n…

Redis中的单线程高性能原因和其他高级命令

单线程 Redis是单线程吗? Redis的单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的,这也是 Redis对外提供键值存储的主要流程。但Redis的其他功能,比如持久化、异步删除、 集群数据同步等,其实是由额外的线程执行的…

【Python 图像处理 PIL 系列 13 -- PIL 及 Image.convert 函数介绍】

文章目录 Python PIL 介绍PIL 使用介绍PIL convert 介绍PIL convert 使用示例 Python PIL 介绍 PIL 是 Python Image Library 的简称。PIL 库中提供了诸多用来处理图片的模块,可以对图片做类似于 PS(Photoshop) 的编辑。比如:改变…

小米澎湃和华为原生鸿蒙,那个更有发展前景?

小米的澎湃系统暂时不了解,但华为的鸿蒙系统值得一说。 就目前鸿蒙而言;24年初鸿蒙星河版面向开发者开放申请。其底座全线自研,去掉了传统的 Linux 内核以及 AOSP 安卓开放源代码项目等代码,仅支持鸿蒙内核和鸿蒙系统的应用。星河…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(一)-向量扩展编程模型

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容: 这是一份关于向量扩展的详细技术文档,内容覆盖了向量指令集的多个关键方面,如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

我的第②个出海工具站 - 2024年50个出海工具站计划

为了大家更好的使用各种出海工具。我上线了一版 出海工具导航 站点,经常使用的可以收藏下,我文内使用的网站都集成在了这里,非常使用。 随着AIGC的到来,2024年到了海外工具回暖的一年。今年计划上线50款出海工具站计划&#xff0c…

增加一个用户自定义开关的功能

为了增加一个用户自定义开关的功能&#xff0c;我们需要引入一个新的接口&#xff0c;比如一个命令行参数或者一个配置文件&#xff0c;让用户能够控制窗帘系统的开关状态。下面是一个更新后的代码示例&#xff0c;其中包含了用户自定义开关的功能&#xff1a; #include <s…

【不可不知的考研复试秘籍 4】

----------------------------------------------------------------------------------------------------- 考研复试科研背景提升班 教你快速深入了解掌握考研复试面试中的常见问题以及注意事项&#xff0c;系统的教你如何在短期内快速提升自己的专业知识水平和编程以及英语…

激光炸弹 刷题笔记

前置知识 二维前缀和 子矩阵的和 刷题笔记 {二维前缀和}-CSDN博客 思路 参考二维前缀和 将子矩阵的和 做成动态矩阵 一个个矩阵搜索 符合要求边长 矩阵中的元素和最大值 将x1,y1用i-k,j-k表示即可 x2,y2用i&#xff0c;j表示 代码 #include<iostream> #include<…

Axios 面试题

Axios 面试题 问题描述&#xff1a; 什么是 Axios&#xff1f;它的主要特点是什么&#xff1f; 答案&#xff1a; Axios 是一个基于 Promise 的 HTTP 客户端库&#xff0c;用于在浏览器和 Node.js 中发送 HTTP 请求。它具有以下主要特点&#xff1a; 支持浏览器和 Node.js 环境…

MongoDB获评2023年Gartner®云数据库管理系统“领导者”

MongoDB 很荣幸在《2023 年 Gartner 云数据库管理系统 (CDBMS) 魔力象限》报告中被评为领导者。我们相信这一成就让 MongoDB 成为唯一一家连续两年斩获“领导者”称号的纯应用程序数据库服务提供商。 社区及开发者数据平台用户的需求一向是 MongoDB 关注的重点&#xff0c;而这…

tomcat 搭建博客 及破解数据库密码

一 tomcat 搭建博客 &#xff08;一&#xff09;博客安装包 1&#xff0c; 把博客war包 放到 webapps 文件夹下 2&#xff0c;会自动解压 3&#xff0c;做个软连接 方便后续操作 可以注意到 因为war包 是又tomcat 自己解压的 所以属主数组还是 tomcat &#xff08…

基于springboot+vue的多媒体素材库的开发与应用系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…