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

call、bind、apply

call、bind、apply它们三个都是函数的方法,都可以用于改变this的指向问题。

var person = "liangxiao"
let obj = {
    name:"张三",
    say:function() {
        console.log(this.name);
    }
}

obj.say();
setTimeout(function() {
    obj.say();
},1000)

obj.say()打印的"张三",但是settimeout打印的"liangxiao",是因为this的指向问题,在对象中this指向this的调用者,也就是obj这个对象,在settimeout中this指向window对象。

如果想要改变settimeout中的this指向obj对象,我们就要修改this的指向:

1. apply

var person = "liangxiao"
let obj = {
    name:"张三",
    say:function(param1,param2) {
        console.log(this.name);
        console.log(param1,param2);
    }
}

obj.say();
setTimeout(function() {
    obj.say.apply(obj,["hello","world"]);
},1000)

第一个参数放想要指向的对象,其余参数以数组的形式传递给函数。

2. call

var person = "liangxiao"
let obj = {
    name:"张三",
    say:function(param1,param2) {
        console.log(this.name);
        console.log(param1,param2);
    }
}

obj.say();
setTimeout(function() {
    obj.say.call(obj,"hello","world");
},1000)

call和apply只有一点区别,就是其余参数以单独的形式分隔开传递给函数,而不是以数组的形式。

3. bind

var person = "liangxiao"
let obj = {
    name:"张三",
    say:function(param1,param2) {
        console.log(this.name);
        console.log(param1,param2);
    }
}

obj.say();
let newFun = obj.say.bind(obj,"hello","world");
newFun();
// let newFun = obj.say.bind(obj)
//newFun("hello","world")

bind方法和call、apply方法的区别是,它不会直接执行函数,而是返回一个新的函数,需要再调用新的函数。

还要注意的一个点就是并不需要一次性的将参数全部传递出去,而是可以放在返回的新函数的调用中传递。

相关文章:

  • MySQL Error Log
  • 【第16届】蓝桥杯C++b组--记录一次被薄纱的心情
  • 艾伦·图灵:计算机科学与人工智能之父
  • 08-JVM 面试题-mk
  • KWDB创作者计划—KWDB认知引擎:数据流动架构与时空感知计算的范式突破
  • 20250412_代码笔记_CVRProblemDef
  • js 颜色转换分析
  • 【Flink运行时架构】核心组件
  • 优化方法介绍(一)
  • PCIe 5.0光学SSD原型问世!
  • 2025-4-11 情绪周期视角复盘(mini)
  • java -jar与java -cp的区别
  • 操作系统 ------ 五种IO模型
  • 前端工程化-包管理NPM-package.json 和 package-lock.json 详解
  • 小甲鱼第004讲:变量和字符串(下)| 课后测试题及答案
  • Git基础知识
  • 蓝桥杯单片机刷题——ADC测量电位器的电压
  • 基于FPGA的六层电梯智能控制系统 矩阵键盘-数码管 上板仿真均验证通过
  • 深入解析Python爬虫技术:从基础到实战的功能工具开发指南
  • python文件打包无法导入ultralytics模块
  • 潍坊专业网站制作公司营销/成都网站seo费用
  • 高端自适应网站设计/营销网站搭建
  • 论某政府网站职能建设/最近刚发生的新闻
  • 做网站的财务需求/网站推广优化
  • 河源建网站/微信小程序怎么制作自己的程序
  • jsp网站维护/怎么制作网页推广