JavaScript call() apply() bind() 三种方法绑定this

PCL 点云配准-ICP算法(精配准) ICP(Iterative Closest Point)算法是一种常用的点云精细配准算法。它通过迭代计算将一组点云变换到另一组点云的最佳位置,最终实现精确的对齐。ICP算法在每次迭代中选择与目标点云最接近的点作为对应点,通过计算最小化源点云和目标点云之间的均方误差(MSE)来进行刚性变换(包括平移和旋转)。 阅读详情

this的动态切换,为Javascript带来巨大的灵活性,初学js,结合资料,总结一下绑定this的三种方法,防止以后忘记。

  • call
  • apply
  • bind
    1. call() 方法,可以指定函数内部this的指向(即函数执行时的所在的作用域),然后在所指定的作用域里面,调用该函数。
var obj ={};
var f=function(){
    return this;
    };
f()===window //true
f.call(obj)===obj // true

上面代码,原先函数f的全局作用域是window,然后我们通过call方法,改变this指向,指向了对象obj,然后在obj的作用域运行函数f。call()方法还可以接受多个参数,即func.call(thisValue,arg1,arg2,...) 第一个参数是this所指的那个对象.
2. apply()方法与call方法相似,不同的事,它接受一个数组作为函数执行时的参数,func.apply(thisValue,[arg1,arg2,...])

function f(x,y){
console.log(x+y);
}
f.call(null,1,1);
f.apply(null,[1,1])

3.bind()
bind()方法用于将函数体内的this绑定到某个对象上,然后返回一个新函数。

var d = new Date();
d.getTime() //.....

var print = d.getTime;
print() // Uncaught TypeError: this is not a Date object.

上面代码中,我们将d.getTime方法赋给变量print,然后调用print就报错了。这是因为getTime方法内部的this,绑定Date对象的实例,赋给变量print以后,内部的this已经不指向Date对象的实例了。

bind方法可以解决这个问题。

var print = d.getTime.bind(d);
print()//.....

bind方法的参数就是所要绑定this的对象

var counter = {
count:0,
inc:function(){
    this.count++;
    }
};
var func = counter.inc.bind(counter);
func();
counter.count // 1
var add = function (x, y) {
  return x * this.m + y * this.n;
}

var obj = {
  m: 2,
  n: 2
};

var newAdd = add.bind(obj, 5);
newAdd(5) // 20

上面代码中,bind方法除了绑定this对象,还将add函数的第一个参数x绑定成5,然后返回一个新函数newAdd,这个函数只要再接受一个参数y就能运行了。

使用bind注意的问题
- 1. 每一次返回一个新函数
bind 方法每运行一次,就返回一个新函数,这会产生一些问题。比如,监听事件的时候,不能写成下面这样。

element.addEventListener('click', o.m.bind(o));

正确的方法是写成下面这样:

var listener = o.m.bind(o);
element.addEventListener('click', listener);
//  ...
element.removeEventListener('click', listener);
    1. 结合回调函数使用
      回调函数是 JavaScript 最常用的模式之一,但是一个常见的错误是,将包含this的方法直接当作回调函数。解决方法就是使用bind方法,将counter.inc绑定counter。
var counter = {
  count: 0,
  inc: function () {
    'use strict';
    this.count++;
  }
};

function callIt(callback) {
  callback();
}

callIt(counter.inc.bind(counter));
counter.count // 1

上面代码中,callIt方法会调用回调函数。这时如果直接把counter.inc传入,调用时counter.inc内部的this就会指向全局对象。使用bind方法将counter.inc绑定counter以后,就不会有这个问题,this总是指向counter。

引用资料网址:https://wangdoc.com/javascript/oop/this.html

Python爬虫应对Cloudflare防护:5秒盾+Turnstile验证码实战(AST反混淆+指纹模拟,成功率95%) Cloudflare 5秒盾+Turnstile验证码的防护核心,是通过“前端JS挑战+多维度指纹校验”确认请求来源的真实性。用AST反混淆还原CF的验证逻辑,避免执行无用代码导致的验证失败;基于真实浏览器采集指纹,确保指纹维度100%匹配真人环境;结合轻量级JS引擎和自动化工具,模拟完整的浏览器执行环境。该方案的绕过成功率可达95%(剩余5%主要是IP或请求频率导致的风控),适用于绝大多数部署CF防护的网站。 阅读详情

相关推荐

一文读懂,WMS仓库管理系统模块功能

对于仓库管理人员来说,仓储管理是一件需要十分负责、又精细化的工作。

深蓝易网的博客 5219

绑定this的方法:call()、apply()、bind()

转载: https://wangdoc.com/javascript/oop/this.html#functionprototypecall 1. Function.prototype.call() 函数实例的call方法,可以指定函数内部this的指向(即函数执行时所在的作用域),然后在所指定的作用域中,调用该函数。 var obj = {}; var f = function () { return this; }; f() === window // true f.call(obj) ==

Silence_Sep的博客 609

KEGG数据库与KAAS工具:基因功能注释的实用指南

本文提供了使用KEGG数据库与KAAS工具进行基因功能注释的完整实用指南。详细阐述了如何从准备基因或蛋白序列开始,通过KAAS服务器获取KEGG Orthology(KO)编号,并解读注释结果。文章进一步介绍了如何利用KOBAS工具进行通路富集分析,将定性观察转化为定量洞察,并分享了提高注释准确率、处理大数据集及使用API等避坑技巧与高阶方法,为基因组学、转录组学研究者奠定坚实的数据分析基础。

weixin_29292535的博客 390

原生js实现 bind 绑定 this 指向

我们都知道对于 this 指向来说,可以通过 call、apply、bind 来改变 this 的指向,那么如何自己实现 bind 绑定 this 的方法呢? 如下分析: 要想直接当全局的方法来使用,那么需要在 Function 原型上添加bind方法; 获取方法自身的 this 指向 获取调用函数的上下文(传递参数) 通过 apply 改变其指向并返回 Function.prototype....

zlq_优快云的博客 576

ORCAD原理图关联封装时出现ERROR(ORCIS-6245)、ERROR(ORCIS-6013)问题

1、当你进行如下操作时: 系统先是提示你出现ERROR(ORCIS-6245)然后再确定后再出现ERROR(ORCIS-6013)问题 是由于你的数据库的路径不对。 具体操作方法如下:1、先找到你的CAPTURE.INI文件。 2、用记事本打开CAPTURE.INI。找到下图路径 3、在你的Orcad capture CIS原理图软件中点击 Options------>CIS con...

weixin_42304393的博客 2万+

CLCD 中国生命周期基础数据库使用攻略

CLCD 是公共建筑碳排放计算的理想选择,其本地化数据可显著提高计算准确性。

hy行者勇哥的博客 2679

call,bind,apply绑定this

call、apply、bind方法绑定this

有点打脑壳的博客 1214

【八股】JUC并发编程篇

👉抽象队列同步器,就是一种锁,内部维护的是一个先进先出的双向队列,队列中存储的是排队的线程,用state来标识是否有线程获得锁【0是无锁状态】👉流程:当一个线程拿到锁后会修改state = 1,这时如果有其他线程访问则会进入队列进行排序,直到state变成0后,队头线程才会拿到锁。在对state进行修改时,用的是CAS操作,所以可以保证原子性。👉它可以实现公平锁或非公平锁【默认】,上述是一个公平锁。如果新线程和队头线程抢锁资源就是非公平锁。

qq_44768318的博客 552

this绑定与call、apply以及bind详解

在JavaScript中this的概念较为抽象,一共可以分为五种场景: 默认绑定 隐式绑定 显式绑定 new绑定 箭头函数绑定 先讲一下this的概念吧,this实际上是在函数被调用的时候才发生的绑定,也就是说this具体指向什么,取决于你怎么调用函数。 而apply和call是属于函数应用,指定this的同时也执行方法,bind则不同,它只是负责绑定this并返回一个新的方法,不会执行,所以我们经常看到bind后面会加一个()。 ...

henu_GM的博客 773

华为OD机试 - 第k个排列 - 全排列递归(Python/JS/C/C++ 2025 C卷 100分)

给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有n!按大小顺序升序列出所有排列的情况,并一一标记当n=3时,所有排列如下“123”,“132,“213”,“231”,“312”,“321”输入两行,第一行为n,第二行为k,给定n的范围是[1,9],给定k的范围是[1,n!排列为“12”和“21”,第2个是“21”。给定n和k,返回第k个排列。输出排在第k位置的数字。只有一个排列,直接返回。

学Java,找哪吒 983

实现基于 Python 和 xterm.js 的 Web 交互终端demo

前端 (HTML):使用 xterm.js 作为前端终端模拟器库。创建了一个 WebSocket 连接到 ws://localhost:8765,这与后端服务器的地址和端口匹配。监听 WebSocket 消息,并将数据写入终端。同时监听用户输入并发送到服务器。后端 (Python):使用 websockets 库来创建 WebSocket 服务器,监听端口 8765。使用 paramiko 库来创建 SSH 客户端并连接到指定的远程服务器。

u010674101的专栏 876

javascript方法--bind()

bind方法,顾名思义,就是绑定的意思,到底是怎么绑定然后怎么用呢,下面就来说说我对这个方法的理解。 语法 fun.bind(this,arg1,arg2,...) bind()方法会创建一个新的函数,称为绑定函数,fun方法在this环境下调用 该方法可传入两个参数,第一个参数作为this,第二个及以后的参数则作为函数的参数调用 实例 1.创建绑定函数 1...

weixin_30402085的博客 380

NVIDIA Isaac Lab 入门教程(一)

Isaac Lab 是一个用于机器人学习的统一模块化框架,旨在简化机器人研究中的常见工作流程(如 RL、从演示中学习和运动规划)。它建立在英伟达 Isaac Sim 的基础上,利用最新的仿真功能实现逼真的场景和快速高效的仿真。该框架的核心目标是Isaac Lab 的主要功能包括:由 PhysX 提供的快速准确的物理模拟、用于矢量化渲染的平铺渲染 API、用于提高鲁棒性和适应性的域随机化,以及对在云中运行的支持。有关该框架的更多信息,请参阅论文[MYY+23]。

机器人控制与仿真应用 8217

call,apply,bind改变this的指向

永久改变this 但是旧函数我还没用没改变之前的 所以bind给我生成一个新函数。生成 一个新函数NewFn,里面的this不管怎么调用都是调用中this的指向。语法:var 新函数 = 旧函数.bind(新函数的this指向)函数名.apply(指定的this指向,[实参1,,实参2])我们可以在函数调用的时候,来指定本次调用中this的指向。我们可以在函数调用的时候,来指定本次调用中this的指向。函数名.call(指定的this的指向,实参1,实参2)单次,暂时改变一次,我指定的this指向。

weixin_52512511的博客 142

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【js理解】call(),apply()以及bind()方法之间的共同点以及区别

call(),apply()以及bind()方法之间的共同点以及区别

weixin_43872912的博客 292

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

理解JavaScript中call()、apply()、bind()的方法

前言 首先,值得一提的是js中call()、apply()和bind()这三种方法是继承于Function.prototype中的实例方法,它们的作用都可以改变函数的调用对象,也就是可改变函数体内this的指向,而this的指向只有当函数被调用时才可被确定指向谁(此处若不了解js中" this "指向问题,可自行百度查询),这三种实例方法同时也可简化代码的调用。 网络中也有博主这样解释:js中call()、apply()和bind()这三种方法是用于改变函数运行时上下文,最终的返回值是调用方法的返回值,

add_L的博客 231

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【js】js中apply()、bind()、call()用法

在下例中的 for 循环体内,创建了一个匿名函数,然后通过调用该函数的 call 方法,将每个数组元素作为指定的 this 值执行了那个匿名函数。从上面的例子可以看出,apply与call基本相同,区别是apply的第二个参数是传数组,而call是传一个或多个参数。bind的区别是调用时要加(),它返回的是一个函数。三者的作用都是为方法指定this的值。JavaScript 新手经常犯的一个错误是将一个方法从对象中拿出来,然后再调用,期望方法中的 this 是原来的对象(比如在回调中传入这个方法)。

qq_22744093的博客 375

JavaScript中绑定this的方法

JavaScript中绑定this的方法

flyffffly的博客 444

JavaScript中call()、apply()和bind()方法的详细用法与区别

JavaScript中call()、apply()和bind()方法的详细用法与区别

2301_80270696的博客 1739

【JavaScript】call、apply、bind

在JavaScript 中,call、apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向。

athicket 1622

this、apply、call、bind

箭头函数没有自己的this,箭头函数的this就是上下文中定义的this,因为箭头函数没有自己的this所以不能用做构造函数。一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变函数体内部this的指向。因为定时器中采用回调函数作为处理函数,而回调函数的this 指向 window。3)使用 new 实例化对象,在构造函数中的this指向实例化对象。里面,这里的this始终指向的是window对象,指向调用该方法的对象。对象的值,扩充函数赖以运行的作用域。

loeyln的博客 1235

JavaScript中 固定 this指向 (call、apply、bind 函数)

由于对象的属性可以赋给另一个对象,所以属性所在的当前对象是可变的,即this的指向是可变的。 this的动态切换,固然为 JavaScript 创造了巨大的灵活性,但也使得编程变得困难和模糊。 有时,需要把this固定下来,避免出现意想不到的情况

qq_36647492的博客 1221

深入解析 JS 中的 this、call、apply 和 bind

call、apply 和 bind都可以改变函数的this对象指向call、apply 和 bind第一个参数都是this要指向的对象,如果如果没有这个参数或参数为undefined或null,则默认指向全局windowcall、apply 和 bind都可以传参,但是apply是数组,而call是参数列表,且apply和call是一次性传入参数,而bind可以分为多次传入bind是返回绑定this之后的函数,applycall则是立即执行。

qq_39279448的博客 1084

JavaScript this绑定:call、apply、bind方法深度解析

你是否曾经在JavaScript开发中遇到过这样的困惑:明明在对象内部定义的方法,却在调用时丢失了this指向?或者在事件处理程序中,this突然指向了DOM元素而不是你期望的对象?这些问题的根源都来自于JavaScript中this的动态绑定机制。 本文将深入解析JavaScript中this的绑定规则,以及如何通过call、apply、bind这三个强大的方法来精确控制this的指向。读完本...

gitblog_00084的博客 727

javascript 中 bind、call和apply的区别

本文详细讲解了javascript 中 bind call apply 的区别以及使用场景和使用方法

Sherry Tian的博客 924

this以及apply,call,bind之间的区别

关于this对象this对象是在运行时基于函数的执行环境绑定的:在全局环境中,this等于window,而当函数被作为某个对象的方法调用时,this等于那个对象。不过,匿名函数的执行环境具有全局性,因此其this对象通常指向window。------《Javascript高级程序设计》除了书里的解释,再来几个直白的例子:// 定义一个全局变量var type = "全局"; // 定义函数aafu...

我在长安长安 3786
上一篇: 小白都懂的tf.Variable、tf.get_variable、tf.variable_scope
下一篇: 数据分析之房价预测(机器学习,sklearn)
CoderLife_
博客等级 码龄8年 22粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值