Javascript中call,apply,bind方法的详解与总结

yizhihongxing

Javascript中call,apply,bind方法的详解与总结

在Javascript中,call、apply和bind是Function对象的三个原生方法,它们的作用都是改变函数中this的指向。虽然功能类似,但是它们的实现方式和使用场景略有不同。

call()方法

call()方法的作用是在指定的this值和参数下调用函数。语法如下:

function.call(thisArg, arg1, arg2, ...)
  • thisArg:可选参数,函数的this指向的对象,如果该参数没有传入,则默认指向window/global对象。
  • arg1, arg2, ...:可选参数,表示调用函数时传入的参数。

当使用call()调用函数时,会把调用该函数的对象作为第一个参数,然后依次传入其他参数执行该函数。

示例1:

function multiply(num1,num2){
  return num1 * num2;
}

let result = multiply.call(null,3,4); // this指向 null
console.log(result); // 12

示例2:

var obj = {name : "张三"};
function getName(){
  return this.name;
}
var getNameByCall = getName.call(obj);  // this指向 obj
console.log(getNameByCall); // 张三

apply()方法

apply()方法和call()很像,也是调用函数并且改变函数this指向。语法如下:

function.apply(thisArg, [arg1, arg2, ...])
  • thisArg:可选参数,函数的this指向的对象,如果该参数没有传入,则默认指向window/global对象。
  • [arg1, arg2, ...]:可选参数,表示调用函数时传入的参数,要放在一个数组中。

当使用apply()调用函数时,会把调用该函数的对象作为第一个参数,然后把其他参数放在一个数组内作为第二个参数传入执行该函数。

示例1:

let arr = [1, 2, 3];
let maxNum = Math.max.apply(null,arr); // null指向this
console.log(maxNum); // 3

示例2:

let person1 = {
    name:'Sara',
    age:23,
    say:function(){
        console.log(this.name + '今年' + this.age);
    }
}

let person2 = {
    name:'Tom',
    age:25,
}

person1.say.apply(person2); // 改变了函数中的this指向,输出 Tom今年25

bind()方法

bind()方法也能调用函数并改变函数中this指向,但是和call()、apply()不同的是,bind()方法会返回一个新的函数,而call()和apply()则不会。语法如下:

function.bind(thisArg, arg1, arg2, ...)
  • thisArg:可选参数,函数的this指向的对象,如果该参数没有传入,则默认指向window/global对象。
  • arg1, arg2, ...:可选参数,表示调用函数时传入的参数。

当使用bind()调用函数时,会把调用该函数的对象作为第一个参数,然后依次传入其他参数执行该函数。

示例1:

var obj = { x: 10 };
function getX(){
  return this.x;
}
var getXByBind = getX.bind(obj); // 返回函数
console.log(getXByBind()); // 10

示例2:

function add(a,b) {
  return a + b;
}
let add5 = add.bind(null, 5); // 不指定 this,创建了一个绑定了额外参数的新函数
console.log(add5(3)); // 输出 8

let add15 = add.bind(null, 15);
console.log(add15(3)); // 输出 18

总结

call()、apply()和bind()都是函数原型上的方法,用于改变函数中this的指向。

  • call()和apply()的作用类似,只是传参方式不同,前者依次传入多个参数,后者放在数组中。
  • bind()方法不会立即执行函数,而是返回一个新的函数,方便后期再次调用。

在实际使用中,call()、apply()和bind()的使用场景有所不同,但是都是用于改变函数中this的指向,可以根据具体需求选择使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript中call,apply,bind方法的详解与总结 - Python技术站

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

相关文章

  • 自制的文件上传JS控件可支持IE、chrome、firefox etc

    实现自制的文件上传JS控件,需要分为以下几个步骤: 第一步:定义HTML结构 首先,我们需要定义HTML结构,提供上传文件的按钮,显示上传进度的进度条以及文件选择框的位置。 <div id="upload-box"> <input type="file" name="file" i…

    JavaScript 2023年5月27日
    00
  • Javascript Date getHours() 方法

    以下是关于JavaScript Date对象的getHours()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的getHours方法 JavaScript Date对象的getHours()方法返回一个小时的数字(0-23)。该方法可用获取当前日期的小时数。 下使用Date对象的getHours()方法的示例: var date =…

    JavaScript 2023年5月11日
    00
  • JS 仿Flash动画放大/缩小容器

    下面我将为你详细讲解“JS 仿Flash动画放大/缩小容器”的完整攻略。 攻略概述 这个攻略解决的问题是实现JS仿Flash的动画效果,主要通过控制容器的大小和位置来实现缩放和移动的效果,同时也可以在动画播放过程中改变容器中的内容。具体实现过程分为以下几个步骤: 创建HTML和CSS代码,用来定义容器和样式。 通过JavaScript获取容器对象,并设置其初…

    JavaScript 2023年6月10日
    00
  • 获取JS中网页各种高宽与位置的方法总结

    获取JS中网页各种高宽与位置是前端开发过程中非常重要的操作之一,本篇攻略将会总结一些在实际开发中常用的方法。 使用原生JavaScript获取元素高宽与位置 在JavaScript中,有三个属性可以用来获取元素的高宽与位置,分别为offsetHeight/Width、clientHeight/Width和getBoundingClientRect()。 of…

    JavaScript 2023年6月10日
    00
  • 非常震撼的纯CSS3人物行走动画

    下面我会详细讲解如何制作一份“非常震撼的纯CSS3人物行走动画”的完整攻略。 准备工作 在开始之前,你需要准备好以下内容: 明确定位要制作的人物,包括人物的外形尺寸和行走的姿势; 一份基础的 HTML 文件,用于展示人物行走动画; 一份基础的 CSS 文件,用于定义人物的样式和动画效果。 制作过程 第一步:定义人物的基础样式 我们需要在 CSS 中定义人物的…

    JavaScript 2023年6月11日
    00
  • 详谈javascript中DOM的基本属性

    当谈到JavaScript中的DOM(文档对象模型)时,我们需要了解DOM的基本属性。DOM是指在HTML文档中的每个元素都可以视为一个对象,而JavaScript可以用来访问和修改它们。 HTML元素的基本属性 HTML元素的基本属性通常可以通过查询DOM文档来找到。下面是访问HTML元素的基本属性的一些示例。 Element.innerHTML Elem…

    JavaScript 2023年6月10日
    00
  • JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结

    为了解决JavaScript在IE和Firefox(火狐)的不兼容问题,我们需要掌握以下知识点: 1. DOM(文档对象模型)的差异 IE和Firefox对DOM标准的解析有所不同,导致同样的JavaScript代码在不同浏览器中执行效果会有所不同。我们可以采用以下方法解决这个问题: (1)使用ID来获取元素 在IE中,我们可以通过document.all[…

    JavaScript 2023年5月18日
    00
  • js中数组Array的一些常用方法总结

    接下来我将详细讲解“js中数组Array的一些常用方法总结”,内容分为以下部分: 概述 数组的创建和赋值 数组的常用方法 1. 概述 数组是 JavaScript 中最常用的数据类型之一,它可以容纳多个值,并按照一定的顺序进行存储和访问。在 JavaScript 中,数组是动态的,即在创建数组时不需要指定其大小,而可以根据需要动态添加或删除元素。 2. 数组…

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