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

yizhihongxing

我会尽可能详细地讲解“浅谈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日

相关文章

  • js输出列表实现代码

    下面是实现JavaScript输出列表的完整攻略,包含以下四个步骤: 创建列表结构 添加列表项 将列表插入到HTML文档中 可选:自定义样式 1. 创建列表结构 在JavaScript中,可以使用createElement()方法创建新的HTML元素。为了创建一个列表,我们需要使用以下代码: const list = document.createEleme…

    JavaScript 2023年5月28日
    00
  • JavaScript函数参数的传递方式详解

    下面是JavaScript函数参数的传递方式的详细讲解: 函数的参数传递方式 在JavaScript中,函数的参数可以通过以下三种方式进行传递: 值传递 (call by value) 传递的是一个值的副本,函数内部对传递进来的值进行修改不会影响原来的值。例如: function foo(num) { num = 5; console.log(num); /…

    JavaScript 2023年5月27日
    00
  • onkeypress字符按键兼容所有浏览器使用介绍

    下面是关于“onkeypress字符按键兼容所有浏览器使用介绍”的完整攻略。 什么是 onkeypress 事件 onkeypress 事件在用户按下并松开任意字符键时触发。该事件只能在可编辑区域或文本框中触发。 如何确保 onkeypress 兼容所有浏览器 不同的浏览器实现 onkeypress 事件的方式有所不同,为了确保事件的兼容性,我们可以使用如下…

    JavaScript 2023年6月11日
    00
  • JSON格式的键盘编码对照表

    JSON格式的键盘编码对照表是一个基于JSON数据格式的简单工具,用于提供不同编码环境下的按键码对照表。这个工具的实用性很强,可以帮助开发者快速查询各种按键的编码,从而方便开发。下面我会提供详细的讲解和两个示例。 分析JSON格式的键盘编码对照表 JSON格式的键盘编码对照表的结构 这个工具的主要结构如下所示: { "keyCodes":…

    JavaScript 2023年5月19日
    00
  • Nuxt项目支持eslint+pritter+typescript的实现

    首先,需要明确一下Nuxt.js是一个基于Vue.js的框架,它提供了一些有用的工具和约定,使得我们可以快速地进行服务端渲染的开发,因此Nuxt.js的项目开发需要支持ESLint+Prettier+TypeScript的实现。下面给出如何在Nuxt项目中实现支持这三个工具的流程: 第一步:初始化Nuxt项目 npx create-nuxt-app my-p…

    JavaScript 2023年6月11日
    00
  • JavaScript函数this指向问题详解

    JavaScript函数this指向问题详解 JavaScript 中的 this 关键字经常让初学者感到困惑或者造成一些常见错误。这篇文章将帮助你全面理解 this 的指向问题以及如何正确使用它。 this 的指向 this 的实际指向是在函数被调用时才能确定的,并且在不同的情况中,其指向也不同。 在全局作用域中 在全局作用域(在任何函数之外)中,this…

    JavaScript 2023年5月27日
    00
  • Javascript实现div的toggle效果实例分析

    下面我将为大家讲解如何使用JavaScript实现div的toggle效果,并提供两个示例说明。 1. 前言 Javascript是一种广泛使用的脚本语言,它被用于在Web页面中创建动态和交互式效果。本文将讲解如何使用Javascript实现div的toggle效果。 2. div的toggle效果是什么 当我们点击一个元素时,可以让另一个元素显示或隐藏。一…

    JavaScript 2023年5月28日
    00
  • JS添加或删除HTML dom元素的方法实例分析

    关于“JS添加或删除HTML dom元素的方法实例分析”的攻略,我将会为您提供一些详尽的说明。 添加HTML DOM元素 使用 JavaScript 来动态添加 HTML DOM 元素,对于网站交互性、用户体验以及动画效果的实现是非常有帮助的。 1. 使用 createElement 方法添加元素 createElement 方法可以创建一个指定的 HTML…

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