浅谈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 中的数字和字符串数据类型。 JavaScript 中的数字(Number)类型可以直接进行算术运算,而字符串(String)类型则是由一系列字符组成的序列,不能直接进行算术运算。在实际开发过程中,我们常常需要将字符串类型转换为数字类型,以便进行计算或比较。 那么,下面就来介绍一下 JavaScript …

    JavaScript 2023年5月28日
    00
  • 什么是DOM(Document Object Model)文档对象模型

    DOM (Document Object Model,文档对象模型)是一种表示 HTML 和 XML 文档的标准程序接口。通过使用 DOM,可以访问和操作一个文档中的内容。DOM 描述了一个层次化的节点树,允许开发人员添加、修改或删除文档中的任意部分。 DOM 模型分为三个部分:文档结构模型(Document),元素对象模型(Element)和特性对象模型(…

    JavaScript 2023年6月10日
    00
  • 一分钟学会JavaScript中的try-catch

    下面是一分钟学会JavaScript中的try-catch的完整攻略。 什么是try-catch try-catch 是 JavaScript 中用来处理异常的一种语句结构。当在 try 块中发生了异常时,该块中代码的执行就会停止,并且 JavaScript 引擎会抛出一个 Exception(异常)。这时就需要在代码中使用 catch 块来捕获这个异常并处…

    JavaScript 2023年5月28日
    00
  • js中常用的Math方法总结

    JS中常用的Math方法总结 Math对象是JavaScript中的内置对象之一,它提供了许多数学函数和常量。通过Math对象,我们可以轻松地实现各种数学运算。 本攻略将会介绍JS中常用的Math方法,包括: Math.abs() Math.ceil() Math.floor() Math.max() Math.min() Math.pow() Math.r…

    JavaScript 2023年5月27日
    00
  • JavaScript浅层克隆与深度克隆示例详解

    下面是详细讲解“JavaScript浅层克隆与深度克隆示例详解”的完整攻略。 什么是克隆? 在 JavaScript 中,克隆是指将一个对象(或数组)的所有属性(或元素)复制到另一个对象(或数组)中。克隆的主要目的是防止对原对象的修改影响到其他对象。在一些特定的场景下,克隆还可以用于混淆对象结构以保证数据的安全性。 JavaScript 中的克隆分为两种:浅…

    JavaScript 2023年6月10日
    00
  • js eval函数使用,js对象和字符串互转实例

    JS Eval函数使用攻略: eval() 函数可以计算某个 JavaScript 字符串,并执行其中的 JavaScript 代码。使用该函数可以动态创建 JavaScript 代码并在页面中执行,其语法如下: eval(string) 其中,string 参数为要执行的 JavaScript 代码。实现时需要注意,eval() 函数会将字符串参数解析为 …

    JavaScript 2023年5月28日
    00
  • 微信小程序的动画效果详解

    我来详细讲解一下“微信小程序的动画效果详解”的完整攻略。 一、动画效果简介 在微信小程序中,可以使用WXML和WXSS中的动画效果,通过制定一定的动画规则和样式来实现页面元素的动态效果。 具体实现是通过提供的3个基本动画帧(transition、 animation、 keyframes)来进行制作。 其中, transition 过渡动画是指某个元素在改变…

    JavaScript 2023年6月11日
    00
  • JS 新增Cookie 取cookie值 删除cookie 举例详解

    JS 新增 Cookie 在 JavaScript 中新增 Cookie 非常简单,只需要设置 document.cookie 属性即可。 document.cookie = "key=value"; 其中,key 表示 Cookie 的键值,value 表示 Cookie 的值。如果需要设置多个 Cookie,可以使用分号(;)隔开。 …

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