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

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实现前端本地文件上传

    当我们需要在前端实现文件上传的功能时,可以使用原生的JavaScript代码来实现。下面是一个完整的攻略,包含了前端上传文件需要用到的一些知识点。 1. 获取文件上传的节点 要上传文件,需要在页面上放置一个文件上传的节点,通常使用HTML中的<input type=”file” />元素。获取节点的方式可以使用原生JavaScript中的 get…

    JavaScript 2023年5月27日
    00
  • 基于JS实现动态跟随特效的示例代码

    下面就是关于“基于JS实现动态跟随特效的示例代码”的攻略。 什么是动态跟随特效? 动态跟随特效,即鼠标在页面上移动时,某个元素会跟随鼠标的移动而移动。这种交互效果可以增加用户的体验感,也可以让网站看起来更加生动有趣。 准备工作 在开始之前,您需要确保您已经熟练掌握了基础的HTML、CSS和JavaScript知识。 示例代码 下面是一段基于JavaScrip…

    JavaScript 2023年6月11日
    00
  • jquery实现的用户注册表单提示操作效果代码分享

    下面是详细的攻略: 什么是jQuery实现的用户注册表单提示操作效果? jQuery实现的用户注册表单提示操作效果就是在用户填写注册表单时,通过jQuery来实现对用户输入进行实时提示的效果。例如,当用户在用户名输入框中输入一些字符时,jQuery可以实现在下方显示一个提示框,告诉用户该用户名是否已经被占用。 实现步骤 引入jQuery库 要使用jQuery…

    JavaScript 2023年6月10日
    00
  • js注入 黑客之路必备!

    JS注入是Web安全领域中非常重要的一个议题,也是Web攻击中常用的一种手段。攻击者可以通过JS注入攻击网站或用户,包括窃取用户信息、篡改网页内容、控制用户会话等。 以下是一个简单的JS注入攻击示例: 攻击目标 我们以一个简单的登录页面(login.html)为目标页面,该页面通过使用jQuery库将用户名和密码传递给后台验证,并在验证失败时显示错误提示。页…

    JavaScript 2023年5月19日
    00
  • javascript数组的内置方法详解

    当然,我非常乐意为您提供关于 “JavaScript 数组的内置方法详解”的完整攻略。 概述 在 JavaScript 中,数组(Array)是一种非常常见的数据类型,具有优秀的灵活性和可扩展性。为了让开发者更加方便的使用和操作数组,JavaScript 内置了众多的数组方法。 在这份攻略中,我将会详细介绍 JavaScript 数组的内置方法,包括数组的创…

    JavaScript 2023年5月27日
    00
  • 对vue下点击事件传参和不传参的区别详解

    对Vue下点击事件传参和不传参的区别详解,主要涉及了在Vue模板中绑定事件并传递参数的方法。 不传参的情况 当我们在Vue模板中绑定一个事件时,如果没有传递任何参数,vue会通过默认的方式将事件对象event传递进去。示例如下: <template> <button @click="handleClick">不传参…

    JavaScript 2023年6月11日
    00
  • js window.event对象详尽解析

    那么首先介绍一下 “JS window.event对象详尽解析” 这个主题。 JS window.event对象详尽解析 在JavaScript中,事件对象是一种特殊的对象,用于存储事件发生时的相关信息,通过事件对象可以获取事件的类型、触发元素、鼠标位置、键盘按键信息等。其中,最常用的事件对象是window.event对象。下面是window.event对象…

    JavaScript 2023年5月27日
    00
  • Javascript MAX_VALUE 属性

    以下是关于JavaScript MAX_VALUE属性的完整攻略。 JavaScript MAX_VALUE属性 JavaScript MAX_VALUE属性是Number对象的一个属性,它表示JavaScript中最大的数值为1.79E+308。MAX_VALUE属性是常量,它不能被修改。 下面是一个使用MAX_VALUE属性的示例: console.lo…

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