JS 中call()和apply()以及bind()的用法与区别

ECMWF等大气数据批量下载(Python API)详细步骤 ECMWF等大气数据批量下载(Python API) 遥感方向做热红外温度反演,不可避免的要用到大气廓线数据,大气数据具有实时性,比如2018年9月1日的早上8点的影像,为了提高反演精度就需要用到时间上与其相差尽可能接近的大气数据,用于消除大气的影响,如果数据量较少我们可以查看影像的时间和空间范围进行下载,但是如果处理某个较大区域时可能涉及到大量的影像,如果一景一景对应查找去下载会很麻烦,因此针对大量数据的自动批量下载很有必要。本文根据 https://cds.climate.copernicus.eu/# 阅读详情

一、定义

  • apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象调用B对象的方法。
  • call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法。

上面的定义看一遍是很懵的,不过自己编写例子遍反复读的时候,会有种拨开云雾的感觉。

call 与 apply 的相同点:

  • 方法的含义是一样的,即方法功能是一样的;
  • 第一个参数的作用是一样的;

call 与 apply 的不同点: 两者传入的列表形式不一样

  • call可以传入多个参数;
  • apply只能传入两个参数,所以其第二个参数往往是作为数组形式传入;

存在的意义:实现(多重)继承。

二、应用

var name = '小张', age = 17;
var obj = {
    name: '小刘',
    objAge: this.age,  //this指向window
    myFun: function(){
        return this.name + this.age;  //this指向obj
    }
}

console.log( obj.objAge );    //17
console.log( obj.myFun() );   //小刘 undefined

1. call()、 apply()、 bind() 都是用来重定义this这个对象的

var name = '小张', age = 17;
var obj = {
    name: '小刘',
    objAge: this.age,
    myFun: function(){
        return this.name + this.age; 
    }
}
var db = {
    name: '小黄',
    age: 18
};

console.log( obj.myFun() );           //小刘undefined
console.log( obj.myFun.call() );      //小张17  this指向window
console.log( obj.myFun.call(db) );    //小黄18  this指向对象db
console.log( obj.myFun.apply() );     //小张17
console.log( obj.myFun.apply(db) );   //小黄18
console.log( obj.myFun.bind()() );    //小张17  bind返回的是函数,必须调用才能执行
console.log( obj.myFun.bind(db)() );  //小黄18

2. 对比call、 bind、 apply 传参情况

var name = '小张', age = 17
var obj = {
    name: '小刘',
    objAge: this.age,  
    myFun: function( fm, t ){
        return this.name + this.age + '来自' + fm + '去往' + t;  
    }
}
var db = {
    name: '小黄',
    age: 18
};

console.log( obj.myFun.call(db, '江西', '深圳') );     //小黄18来自江西去往深圳
console.log( obj.myFun.apply(db, ['江西', '深圳']) );  //小黄18来自江西去往深圳
console.log( obj.myFun.bind(db, '江西', '深圳')() );   //小黄18来自江西去往深圳 

从上面的结果来看:

call、 bind、 apply 这三个函数的第一个参数都是this的指向对象。

第二个参数差别就来了:

  • call 的参数是直接放进去的,第二第三第n个参数全都用逗号分隔,直接放到后面obj.myFun.call(db,‘江西’, …, ‘string’)。

  • apply的所有参数都必须放在一个数组里面传进去。

  • bind除了返回函数以外,它的参数和call 一样。

当然,三者的参数不限定是String 类型,允许是各种类型,包括函数,对象等等。

Electron - Electron failed to install correctly, please delete node_modules/electron and try install Electron安装失败:Electron failed to install correctly, please delete node_modules/electron and try installing again,electron安装报错:Electron failed to install correctly...解决方案,Electron 未能正确安装,请删除 node_modules/electron,然后再次尝试安装,如何解决这个问题,手把手教你解决,在yarn dev时报错,electr 阅读详情

相关推荐

UE4入门实例17(Unreal制作卡通Post Process材质球)

效果展示 #1 创建Post Porcess材质球 #2 编写Shader功能 #3 设置场景区域内风格化渲染 #1 创建Post Porcess材质球 #2 编写Shader功能 创建基础效果 移除现有通道渲染 设置视图渲染范围 #3 设置场景区域内风格化渲染 #4 加群下载Shader源码:284105567 ...

Unity3d 攻城师一枚 1345

JS中bind和call,apply的区别

call能干啥? 1、能够改变函数里面的this。也能降低耦合度。 1)、eat和Person,Dog没有关系,但是通过call可以让他们有关系。 2)、call函数的第一个参数,就是函数本身的this。 3)、call函数的第二个参数朝后,就是函数本身的参数。 call和apply的异同点 1、相同: 都能改变this的指向,call和apply的第一个...

痞猫zz的软件路 247

期末求生指南:手把手教你用F12开发者工具绕过百一测评的切屏检测(JavaScript/jQuery实战)

本文详细介绍了如何利用F12开发者工具绕过百一测评的切屏检测,通过分析JavaScript/jQuery中的blur()和focus()事件监听机制,提供实战技巧动态修改代码。文章涵盖事件监听定位、代码修改方法及应对高级检测机制的策略,适合需要临时解决线上考试限制的学生参考。

weixin_30731305的博客 447

call()、apply()和bind()方法有什么区别

call()apply()和bind()是 JavaScript 中 Function 对象的三个方法,它们都与函数的上下文(即this。

weixin_50914755的博客 464

Shopee商品详情页反爬实战:手把手逆向x-sap-Ri和x-sap-Sec请求头加密

本文详细解析了Shopee商品详情页反爬机制中x-sap-Ri和x-sap-Sec请求头参数的加密逻辑,通过JS逆向技术手把手教你定位加密入口、分析哈希算法与对称加密实现,并提供完整实战案例和应对反爬策略的高级技巧,助力开发者突破电商平台数据采集难点。

weixin_27875131的博客 1826

基于Jeecgboot3.8.1的vue3版本前后端分离的flowable流程管理平台

基于Jeecgboot3.8.1的vue3版本前后端分离的flowable流程管理平台

宁波阿成的博客 1544

js中call(),apply()和bind()的区别

call,apply和bind都是js中强制改变this指向的方法。具体用法以及差异如下: 1. call() 用法: call(this指向对象,参数1,参数2……) 例:在直接调用方法时,this指向window 使用call改变this指向后:this指向对象obj1 call有参数传递时:参数依次用逗号排在对象后 2. apply() 用法: apply(this 指向对象,[参数1,参数2……]) 例同上:在直接调用方法时,this指向window 使用apply改变this指向后

weixin_43152611的博客 343

使用 WSL 在 Windows 上安装 Linux

开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。通过适用于 Linux 的 Windows 子系统 (WSL),开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具,不用进行任何修改,也无需承担传统虚拟机或双启动设置的费用。

隔壁老瓦的专栏 2872

JS中call()、apply()、bind()的区别及用法

1.区别 1.1三者的相同点:都是用来改变this的指向 1.2 call()和apply()的区别: 相同点:都是调用一个对象的一个方法,用另一个对象替换当前对象(功能相同) 例如: B.call(A, args1,args2);即A对象调用B对象的方法 F.apply(G, arguments);即G对象应用F对象的方法 不同点:参数书写方式不...

奋斗小强的博客 2万+

单智能体篇:Prompt工程艺术

模型在接收到 Prompt 时会自动扮演“角色”,角色定义的好坏直接影响智能体输出的风格和专业性。角色定义的重要性让智能体具备明确身份,例如“你是一位专业理财顾问”或“你是一个幽默的文案创作助手”。角色限定了模型知识输出的范围,使回答更专业、更贴合预期。实战示例模糊Prompt给我一些投资建议。你可以投资股票或者基金。优化Prompt你是一位具有10年经验的专业理财顾问,请给我针对30岁男性,年收入20万,风险偏中等的投资组合建议。

公众号:AI前沿侦探 1303

【AIZ智能体】Codex 全能AI助手从部署到使用实战操作详解

Codex 全能AI助手从部署到使用实战操作详解

congge 2982

JS中call()、apply()、bind()的用法和区别

在JavaScript中,call、apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向。 一、方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象。 说明: call 方法可以用来代替另一个对象调用一个方法。call...

tomy123456123456的博客 1516

Vue2+OpenLayers动态绘制两个经纬度并计算距离(提供Gitee源码)

动态绘制两个经纬度并计算它们之间的距离。

黄团团的个人博客 365

JavaScript中call()、apply()和bind()方法的详细用法与区别

JavaScript中call()、apply()和bind()方法的详细用法与区别

2301_80270696的博客 1738

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JavaScript 中 call()、apply()、bind() 的用法与区别

JavaScript 中 call()、apply()、bind() 的用法与区别 在js的开发当中,会经常使用到call()、apply()、bind()这三个函数,这三个函数到底是干嘛的呢? 其实很简单,这其中最主要的区别是this的指向问题,这三个函数都是改变函数内部Function的this指向。 首先,我们先看一下下面的例子: // 例子一 var myDog = 'tom' va...

qq_45272329的博客 483

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JavaScript 中 call()、apply()、bind() 的用法与区别--笔记

原文:Runoob,JavaScript 中 call()、apply()、bind() 的用法

ftm_csdn的博客 275

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

call、apply和bind的区别及如何手写

三者的相同点:都是用来改变this的指向 1.call()和apply()的区别: 都是调用一个对象的一个方法,用另一个对象替换当前对象(功能相同) B.call(A, args1,args2);即A对象调用B对象的方法 F.apply(G, arguments);即G对象应用F对象的方法 相同点:第一个参数是this要指向的对象,当第一个参数为null、undefined时,默认指向window; 不同点:apply()第二个参数是数组,call()是参数列表 ...

weixin_43190804的博客 506

js call()、apply()、bind()的理解

js call()、apply()、bind()的用法及区别 call() call() 方法第一个参数是作为函数上下文的对象,后面传入的是一个参数列表,而不是单个数组。 var name = '张三', age = 13; var obj = { name: '李四', objAge: this.age, fun: function (c, t) { console.log(`${this.name} 今年${this.age}岁 来自${c} 要去${t}旅游`

WL_creep的博客 161

JavaScript call()/apply()/bind()

call()/apply()/bind()

qq_52265298的博客 417

Javascript bind() call() apply()

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

abelard2008的专栏 213

【js理解】call(),apply()以及bind()方法之间的共同点以及区别

call(),apply()以及bind()方法之间的共同点以及区别

weixin_43872912的博客 292

JavaScript中call()apply()bind()

JavaScript 中 call()、apply()、bind() 的用法 其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例 1 obj.objAge; // 17 obj.myFun() // 小张年龄 undefined 例 2 shows() // 盲僧 比较一下这两者 this 的差别,第一个打印里面的 this 指向 obj,第二个全局声明的 shows() 函数 this 是 window ; 1,call()、apply()、bind() 都是用

真爱一生的博客 139

JavaScript 中 call()、apply()、bind() 的用法

原文链接: JavaScript 中 call()、apply()、bind() 的用法 ...

阿豪 66

js中的bind()的使用与手写bind()

js中的bind()的使用与手写bind()

一个小白的成长历程 357

JavaScript apply()、call()和bind()笔记

JavaScript中的apply()、call()和bind()。 以及在盗用构造函数中的应用。

weixin_39427900的博客 175

js之apply,call浅谈

apply(), call() 的用途都是在特定的作用域中调用函数,实际上等于设置函数体内的this对象的值。区别在于: apply()接收的两个参数,一个是所绑定的作用域,一个是数组(例1) call()接收的两个参数,一个是同上为所绑定的作用域,一个是列表,即参数都需要罗列出来。 如果对参数格式无特殊要求,其实两个函数都是可以的(例2) 另外 bind() 方法是创建一个函数的实例,this会被

hell0__kitty的博客 418
上一篇: canvas 网站背景鼠标吸附线条动画
下一篇: vue+iview+less 实现一键换肤
hst❀
博客等级 码龄8年 2364粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值