浅谈javascript的call()、apply()、bind()的用法

我会尽可能详细地讲解“浅谈javascript的call()、apply()、bind()的用法”的完整攻略。

什么是call()、apply()、bind()

在javascript中,call()、apply()、bind()都是用于修改函数执行时的上下文(即函数运行时的this指向)。

call()和apply()都可以在函数调用时改变函数体内的this指向。而且两者传参的方式有所不同。其中,call()的参数是一系列的值,而apply()的参数是一个数组。

bind()则是新生的改变this连接指向的函数,并能返回一个新的函数给我们使用。

call()、apply()的用法

示例1

function showName() {
  console.log(this.name);
}

var obj1 = {
  name: '张三'
};

showName.call(obj1); // 输出"张三"

以上示例中定义了一个函数showName(),并定义了一个对象obj1,对象中定义了一个名为name的属性。接下来,我们将showName()函数的上下文传入obj1对象,因此,在调用showName.call(obj1)时,函数内的this指向obj1,那么在控制台输出的内容就将为张三

示例2

function showInfo(message) {
  console.log(message + this.name);
}

var obj2 = {
  name: '李四'
};

showInfo.apply(obj2, ['我的名字是']); // 输出"我的名字是李四"

以上另一个示例中,我们定义了一个新的函数showInfo(),并定义了新的对象obj2,同样定义了一个名为name的属性。在调用showInfo.apply(obj2, ['我的名字是'])时,将showInfo()函数的上下文传入obj2对象,并在函数中引用了一个传递进来的message参数,最后输出的内容就变成了传递进来的messageobj2对象的name属性值。因此,在控制台输出为我的名字是李四

bind()的用法

示例3

var obj3 = {
  x: 10,
  y: 20
};

function Point() {
  this.point = [this.x, this.y];
}

var p = new Point();
console.log(p.point); // 输出"[undefined, undefined]"

var bindPoint = Point.bind(obj3);
var pBind = new bindPoint();
console.log(pBind.point); // 输出"[10, 20]"

以上示例中,我们定义了一个对象obj3,其中定义了xy两个属性。接着我们定义了一个函数Point(),同时在函数中定义了一个point数组,数组中存放的是xy的值。在调用new Point()时,我们发现数组里的this.xthis.y的值都为undefined,这是因为this指向的是Point()函数本身,而不是我们所希望的obj3对象。

因此,我们使用bind()来改变Point()函数的this指向,并将其绑定到obj3对象上,那么变量bindPoint将会是一个与Point()函数相绑定的新函数。接着我们再次调用new bindPoint()并输出其point数组中的值,那么控制台输出的内容就将为[10, 20]

总结

以上就是关于javascript中的call()apply()bind()三个函数的简介和使用方法,通过这些示例我们相信大家已经能够更加清楚地理解三者之间的区别和用法了。需要注意的是,这些函数都是可用于修改函数执行时的上下文的,而且在实际开发中常常会被使用到。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈javascript的call()、apply()、bind()的用法 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript字符串转换数字的方法

    JavaScript字符串转换数字的方法有很多种。以下是几种常见的转换方法: 使用parseInt()函数 parseInt()函数可以将一个字符串转换成整数。如果字符串包含了非数字字符,则会忽略这些字符。 let str = "123"; let num = parseInt(str); console.log(num); // 123…

    JavaScript 2023年5月28日
    00
  • 使用validate.js实现表单数据提交前的验证方法

    实现表单数据提交前的验证是优化用户体验的重要步骤之一,这可以避免用户不必要的等待和提交失败的情况。validate.js 是一个轻量级的 JavaScript 库,可用于在提交前对表单数据进行验证,能够省去自己写正则表达式的麻烦,极大地简化表单验证的过程。 下面将介绍使用 validate.js 实现表单验证的具体步骤: 步骤 1:导入库 第一步是导入 va…

    JavaScript 2023年6月10日
    00
  • js的image onload事件使用遇到的问题

    下面是详细解释和示例: 关于 image onload 事件 Image 对象是 JavaScript 用于载入图像的对象。Image 对象的 onload 事件在图像载入完成时触发,可以用于检测图像是否成功加载,并在成功后执行其他操作。当然,如果图像加载失败,onload 事件是不会被触发的。 经典的 image onload 示例 以下是一个完整的 im…

    JavaScript 2023年5月19日
    00
  • js页面跳转常用的几种方式

    下面是关于“js页面跳转常用的几种方式”的完整攻略。 一、背景 在web应用中,页面跳转是非常常见的操作。而在前端开发中,我们通常使用JavaScript来实现页面的跳转功能。本文将介绍js页面跳转的常用几种方式。 二、常用的几种方式 1.通过window.location.href实现页面跳转 代码形式如下: window.location.href = …

    JavaScript 2023年6月11日
    00
  • jquery点击缩略图切换视频播放特效代码分享

    下面是详细讲解”jquery点击缩略图切换视频播放特效代码分享”的完整攻略: 1.需求概述 我们现在需要实现一个点击缩略图切换视频播放的特效,这里有两个核心需求: 点击不同的视频缩略图,展示不同的视频。 点击缩略图切换视频时需要加入过渡效果,让页面更加平滑流畅。 2.实现思路 实现一个点击缩略图切换视频的效果,首先需要用到jQuery库来实现相关的操作。 定…

    JavaScript 2023年6月11日
    00
  • 前端vue2 element ui高效配置化省时又省力

    使用Vue2 Element UI进行高效配置化开发,可以极大地提高前端开发效率。以下是一个完整攻略: 1. 准备工作 安装Vue CLI Vue CLI是Vue.js官方提供的脚手架工具,用于快速创建Vue.js项目。 npm install -g @vue/cli 安装完成后,您可以使用vue命令初始化一个Vue.js项目。 安装Element UI E…

    JavaScript 2023年6月10日
    00
  • javascript demo 基本技巧

    首先,我们要了解何谓 JavaScript Demo,这其实是一种基于 JavaScript 语言开发的小型互动演示,它可以运行在浏览器端或 Node.js 等环境中,用于展示和演示某项特定功能或效果。 下面,我将分享一些 JavaScript Demo 开发的基本技巧,帮助大家更好地开发出功能强大且易维护的演示程序。 好的 JavaScript Demo …

    JavaScript 2023年5月27日
    00
  • 黑客教你破解Session cookie的方法

    首先我们要明确,黑客破解Session Cookie是一种违法行为,严禁个人或组织进行类似活动。下面的内容仅供学术研究和了解安全防范的目的。 概述 “黑客教你破解Session Cookie的方法”是一种常见的网络攻击行为,通过获取合法用户的Session Cookie,黑客可以模拟合法用户进行各种操作,例如进行非法访问、窃取用户信息等等。让我们来了解黑客破…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部