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知识库 -> call()函数apply()函数bind()函数 -> 正文阅读

[JavaScript知识库]call()函数apply()函数bind()函数

call()函数的基本使用

call()函数调用一个函数时,会将该函数的执行对象上下文改变为另一个对象

        //定义一个add()函数
        function add(x,y){
            return x + y
        }
        // 通过call()函数进行add()函数的调用
        function myAddCall(x,y){
            // 调用add()函数的call函数
            return add.call(this,x,y)   // 这个地方的this就是myAddCall
        }
        console.log(myAddCall(10,20));  // 30

apply()函数的基本使用

apply()函数的作用和call()函数是一样的,只是在传参的形式上有差别

        // 定义一个add()函数
        function add(x,y){
            return x + y
        }
        // 通过call()函数进行add()函数的调用
        function myAddApply(x,y){
            // 调用add()函数的call函数
            return add.apply(this,[x,y])   // 这个地方的this就是myAddCall
        }
        console.log(myAddApply(10,20));   // 30

bind()函数的基本使用

bind()函数创建一个新的函数,在调用时设置this关键字为提供的值,在执行新函数时,

将给定的参数列表作为原函数的参数序列,从前往后匹配

        // 定义一个add()函数
        function add(x,y){
            return x + y
        }
        // 通过call()函数进行add()函数的调用
        function myAddBind(x,y){
            // 调用add()函数的call函数
            var bindFn = add.bind(this,x,y);
            return bindFn()  
        }
        console.log(myAddBind(10,20));

三者的相同之处是:都会改变函数调用的执行主体,修改this的指向

不同之处:

1.关于函数的立即执行,call()函数和apply()函数在执行后会立即调用前面的数,

bind()函数不会立即调用,他会返回一个新的函数,可以在任何时候进行调用.

2.关于传参,call()函数与bind()函数接受的参数相同,第一个参数表示要改变的执行主体,

既this指向,从第二个参数开始到最后一个参数表示的是函数接受的参数;

而对应apply()函数,第一个参数一致,第二个参数是一个数组,表示接受所有参数,

如果第二个参数不是一个有效的数组或者arguments对象,则会抛出一个typeError异常.

求数组的最大项和最小项

array数组本身没有max和min函数.但是Math有,可以使用apply函数来改变Math.max和min的执行主体.然后将数组作为参数传递给max和min函数

        var arr = [1,2,5,6,7,8,5,35,34]
        // 求数组中的最大值
        console.log(Math.max.apply(null,arr));
        // 求数组中的最小值          (window,arr)也行
        console.log(Math.min.apply(undefined,arr));  

bind()函数配合setTimeout

在默认情况下,使用setTimeout()函数的时候,this关键字会指向window,当使用类的函数时,?需要this引用类的实例,我们可能要显示的把this绑定到回调函数以便继续使用实例.

        // 定义一个函数
        function LateBloomer() {
            this.petalCount = Math.ceil(Math.random()*33)+1;
        }
        // 定义一个原型函数
        LateBloomer.prototype.bloom = function() {
            // 在一秒后调用实例的dclare()函数
            window.setTimeout(this.declare.bind(this),1000)
        }
        // 定义原型链上的declare()函数
        LateBloomer.prototype.declare = function() {
            console.log(this.petalCount);
        }

        //生成LateBloomer的实例
        var flower = new LateBloomer()
        flower.bloom()

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 11:44:26  更:2022-04-28 11:46: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年11日历 -2024/11/24 0:50:35-

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