IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> javaScript中call()、bind()和apply()的用法和区别 -> 正文阅读

[JavaScript知识库]javaScript中call()、bind()和apply()的用法和区别

了解call()、bind()、apply()之前我们需要先了解一下this的指向
案例1:

var name = "王五",age =20; 
    var Person ={
      name:"张三",
      age:18,
      message:function(){
        console.log("姓名:"+name+"  年龄:"+age)  
      }
    }
Person.message();	//姓名:王五  年龄:20

案例1 的结果似乎和所想的结果有些差别,name和age所输出的是window下的name和age的值,而不是当前对象里面的值

案例2:

var name = "王五",age =20; 
    var Person ={
      name:"张三",
      age:18,
      message:function(){
        console.log("姓名:"+this.name+"  年龄:"+this.age)
      }
    }
    Person.message();//姓名:张三  年龄:18

案例1 和案例2 的区别,可以看出加了this,name和age对象变成了当前对象Person里面的值,所以this是指向当前对象

案例3:

 var name = "王五",age =20; 
    var Person ={
      name:"张三",
      perAge:this.age,
      message:function(){
        console.log("姓名:"+this.name+"  年龄:"+this.age)
      }
    }
 Person.message();//姓名:张三  年龄:undefined

案例3 我们可以看出,this只会在当前对象(Person)中找age,没有找到age,那么结果就是undefined

了解了this,我们来看一下call()、bind()、apply()

  1. 改变this的指向,重定义this这个对象
 var name = "王五",age =20; 
    var Person ={
      name:"张三",
      perAge:this.age,
      message:function(sex,address,){
        console.log("姓名:"+this.name+"  年龄:"+this.age)
      }
    }
    var person = {
      name:"赵六",
      age:25
    }
  Person.message.call(person);//姓名:赵六  年龄:25
  Person.message.bind(person)();//姓名:赵六  年龄:25
  Person.message.apply(person);//姓名:赵六  年龄:25

共同点 :call()、bind()、apply()都是改变this的指向
区别bind 返回的是一个新的函数,你必须调用它才会被执行

  1. 三者传入参数问题
var name = "王五",age =20; 
    var Person ={
      name:"张三",
      perAge:this.age,
      message:function(sex,address,){
        console.log("姓名:"+this.name+"  年龄:"+this.age+"  性别:"+sex+"  住址:"+address)
      }
    }
    var person = {
      name:"赵六",
      age:25
    }
    Person.message.call(person,"男","上海");
    Person.message.bind(person,"男","上海")();
    Person.message.apply(person,["男","上海"]);

共同点: 第一个参数传入的都是所要指向的对象
不同点: 从第二个参数开始,就是三者的区别。

  • call和bind传入的参数都是以 字符串 形式传入,多个参数之间用逗号隔开
  • apply从第二个参数开始,后面的参数都需要放在 一个数组中,每个参数之间同样需要用逗号隔开。如果没有放在数组中则会报错
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:25:59  更:2021-10-11 17:28:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 17:57:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码