服务外包网站西安高端网站设计公司

web/2025/9/30 17:00:42/文章来源:
服务外包网站,西安高端网站设计公司,深圳网站关键词优化公司哪家好,网站开发合同是否专属管辖1.call/apply/bind方法的来源 首先#xff0c;在使用call#xff0c;apply#xff0c;bind方法时#xff0c;我们有必要知道这三个方法究竟是来自哪里#xff1f;为什么可以使用的到这三个方法#xff1f; call#xff0c;apply#xff0c;bind这三个方法其实都是继承自…1.call/apply/bind方法的来源   首先在使用callapplybind方法时我们有必要知道这三个方法究竟是来自哪里为什么可以使用的到这三个方法   callapplybind这三个方法其实都是继承自Function.prototype中的属于实例方法。 1 console.log(Function.prototype.hasOwnProperty(call)) //true 2 console.log(Function.prototype.hasOwnProperty(apply)) //true 3 console.log(Function.prototype.hasOwnProperty(bind)) //true   上面代码中都返回了true表明三种方法都是继承自Function.prototype的。当然普通的对象函数数组都继承了Function.prototype对象中的三个方法所以这三个方法都可以在对象数组函数中使用。   关于继承的概念会在以后与大家分享。   2.Function.prototype.call()   函数实例的call方法可以指定该函数内部this的指向即函数执行时所在的作用域然后在所指定的作用域中调用该函数。并且会立即执行该函数。   看个例子来好好理解这段话。 1 var keith {2 rascal: 1233 };4 5 var rascal 456;6 7 function a() {8 console.log(this.rascal);9 } 10 11 a(); //456 12 a.call(); //456 13 a.call(null); //456 14 a.call(undefined); //456 15 a.call(this); //456 16 a.call(keith); //123   上面代码中a函数中的this关键字如果指向全局对象返回结果为456。可以看到如果call方法没有参数或者参数为null或undefined或者this则等同于指向全局对象。如果使用call方法将this关键字指向keith对象也就是将该函数执行时所在的作用域为keith对象返回结果为123。   call()方法可以传递两个参数。第一个参数是指定函数内部中this的指向也就是函数执行时所在的作用域第二个参数是函数调用时需要传递的参数。 1 function keith(a, b) { 2 console.log(a b); 3 } 4 5 keith.call(null, 1, 2); //3   第一个参数是必须的可以是nullundefinedthis但是不能为空。设置为nullundefinedthis表明函数keith此时处于全局作用域。第二个参数中必须一个个添加。而在apply中必须以数组的形式添加。   call方法的一个应用是调用对象的原生方法。也可以用于将类数组对象转换为数组。 1 var obj {};2 console.log(obj.hasOwnProperty(toString)); //false3 4 obj.hasOwnProperty function() {5 return true;6 }7 8 console.log(obj.hasOwnProperty(toString)); //true9 10 console.log(Object.prototype.hasOwnProperty.call(obj, toString)); //false   上面代码中hasOwnProperty是obj对象继承的方法如果这个方法一旦被覆盖就不会得到正确结果。call方法可以解决这个方法它将hasOwnProperty方法的原始定义放到obj对象上执行这样无论obj上有没有同名方法都不会影响结果。要注意的是hasOwnProperty是Object.prototype原生对象的方法而call是继承自Function.prototype的方法。    3.Function.prototype.apply()   apply方法的作用与call方法类似也是改变this指向函数执行时所在的作用域然后在指定的作用域中调用该函数。同时也会立即执行该函数。唯一的区别就是它接收一个数组作为函数执行时的参数。   apply方法的第一个参数也是this所要指向的那个对象如果设为null或undefined或者this则等同于指定全局对象。第二个参数则是一个数组该数组的所有成员依次作为参数在调用时传入原函数。原函数的参数在call方法中必须一个个添加但是在apply方法中必须以数组形式添加。   看一下callapply的细微差别。 1 function keith(a, b) { 2 console.log(a b); 3 } 4 5 keith.call(null, 2, 3); //5 6 keith.apply(null, [2, 3]); //5   上面代码中第一个参数为null指向全局作用域第二个参数传入的形式稍稍不同。   apply方法有以下应用。     3.1找出数组中的最大数 1 var a [2, 4, 5, 7, 8, 10]; 2 3 console.log(Math.max.apply(null, a)); //10 4 console.log(Math.max.call(null,2, 4, 5, 7, 8, 10)); //10   Javascript中是没有提供找出数组中最大值的方法的结合使用继承自Function.prototype的apply和Math.max方法就可以返回数组的最大值。      3.2将数组的空元素变为undefined   通过apply方法利用Array构造函数将数组的空元素变成undefined。 1 console.log(Array.apply(null, [1, , 3])); // [1, undefined, 3]   空元素与undefined的差别在于数组的forEach方法会跳过空元素但是不会跳过undefined和null。因此遍历内部元素的时候会得到不同的结果。 var a [1, , 3];a.forEach(function(index) {console.log(index); //1,3 跳过了空元素。})Array.apply(null,a).forEach(function(index){console.log(index); 1,undefined,3 将空元素设置为undefined})     3.3转换类似数组的对象   另外利用数组对象的slice方法可以将一个类似数组的对象比如arguments对象转为真正的数组。当然slice方法的一个重要应用就是将类似数组的对象转为真正的数组。call和apply都可以实现该应用。 1 console.log(Array.prototype.slice.apply({0:1,length:1})); //[1] 2 console.log(Array.prototype.slice.call({0:1,length:1})); //[1] 3 console.log(Array.prototype.slice.apply({0:1,length:2})); //[1,undefined] 4 console.log(Array.prototype.slice.call({0:1,length:2})); //[1,undefined] 1 function keith(a,b,c){ 2 return arguments; 3 } 4 5 console.log(Array.prototype.slice.call(keith(2,3,4))); //[2,3,4]   上面代码的callapply方法的参数都是对象但是返回结果都是数组这就起到了将对象转成数组的目的。从上面代码可以看到这个方法起作用的前提是被处理的对象必须有length属性以及相对应的数字键。      4.Function.prototype.bind()   bind方法用于指定函数内部的this指向执行时所在的作用域然后返回一个新函数。bind方法并非立即执行一个函数。 1 var keith {2 a: 1,3 count: function() {4 console.log(this.a);5 }6 };7 8 keith.count(); //19 keith.count(); //2 10 keith.count(); //3   上面代码中如果this.a指向keith对象内部的a属性如果这个方法赋值给另外一个变量调用时就会出错。 1 var keith { 2 a: 1, 3 count: function() { 4 console.log(this.a); 5 } 6 }; 7 8 var f keith.count; 9 f(); //NaN   上面代码中如果把count方法赋值给f变量那么this对象指向不再是keith对象了而是window对象。而window.a默认为undefined进行递增运算之后undefined就等于NaN。   为了解决这个问题可以使用bind方法将keith对象里的this绑定到keith对象上或者是直接调用。 1 var f keith.count.bind(keith); 2 f(); //1 3 f(); //2 4 f(); //3 1 keith.count.bind(keith)() //1 2 keith.count.bind(keith)() //2 3 keith.count.bind(keith)() //3   当然this也可以绑定到其他对象上。 1 var obj { 2 a: 100 3 }; 4 var f keith.count.bind(obj); 5 f(); //100 6 f(); //101 7 f(); //102   同样我们也可以给bind方法传递参数第一个参数如果为null或者undefined或者this会将函数内部的this对象指向全局环境第二个为调用时需要的参数并且传递参数的形式与call方法相同。 1 function keith(a, b) { 2 return a b; 3 } 4 console.log(keith.apply(null,[1,4])); //5 5 console.log(keith.call(null,1,4)); //5 6 console.log(keith.bind(null, 1, 4)); //keith() 7 console.log(keith.bind(null, 1, 4)()); //5   上面代码中可以看出callapplybind三者的区别call和apply方法都是在调用之后立即执行的。而bind调用之后是返回原函数需要再调用一次才行有点像闭包的味道如果对闭包概念不熟悉可以浏览这两篇文章javascript--函数参数与闭包--详解javascript中重要概念-闭包-深入理解。   5.绑定回调函数的对象   在这篇文章javascript之 this 关键字详解中有谈及到如果在回掉函数中使用this对象那么this对象是会指向DOM对象也就是button对象。如果要解决回调函数中this指向问题可以用如下方法。 1 var o {2 f: function() {3 console.log(this o);4 }5 }6 7 $(#button).on(click, function() {8 o.f.apply(o);9 //或者 o.f.call(o); 10 //或者 o.f.bind(o)(); 11 });   点击按钮以后控制台将会显示true。由于apply方法或者call方法不仅绑定函数执行时所在的对象还会立即执行函数而bind方法不会立即执行注意区别因此不得不把绑定语句写在一个函数体内。   6.callapplybind方法的联系和区别   其实用于指定函数内部的this指向的问题这三个方法都差不多只是存在形式上的差别。读者可以将以上的例子用三种方法尝试用三种方法实现。   总结一下callapplybind方法   a第一个参数都是指定函数内部中this的指向函数执行时所在的作用域然后根据指定的作用域调用该函数。   b都可以在函数调用时传递参数。callbind方法需要直接传入而apply方法需要以数组的形式传入。   ccallapply方法是在调用之后立即执行函数而bind方法没有立即执行需要将函数再执行一遍。有点闭包的味道。   d改变this对象的指向问题不仅有callapplybind方法也可以使用that变量来固定this的指向。转载于:https://www.cnblogs.com/Jade-Liu18831/p/9580410.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dedecms 网站名称标签优化关键词首页排行榜

0 设备 创龙C6657Artix-7工业评估板 SEED-XDS560v2 1 实现功能 控制评估底板 LED1 、 LED2 、 LED3 每隔 0.5s 将状态同时翻转一次。 采用查询的方式控制评估版的KEY2控制LED2亮灭。 2 代码 2.1 GPIO驱动 2.1.1 c66x_gpio.c /* Compiler Header files */ #include …

购物商城网站都有哪些功能小程序推广工作怎么样

面试篇就是复习前面学的 什么是JVM 1.定义:JVM指的是Java虚拟机,本质是一个运行在计算机上的程序 2.作用:为了支持Java中Write Once ,Run Anywhere 编写一次 到处运行的跨平台特性 功能: 1.解释和运行 2.内存管理…

商城类网站建设篇青岛手机网站建设报价

这里是Z哥的个人公众号每周五11:45 按时送达有时也会有感而发,来加个餐~我的第「84」篇原创敬上前天早上,在36kr看到一篇文章《一个负能量的人,可以轻易搞垮周围人的生活》,讲述了可能我们每个人身边都存在…

网站建设wap网站建设插件代码大全

1.动态链接库的编写 1.1 在项目中涉及到很多动态链接库的时候,可创建一个总的动态链接库,把所有的其他的动态链接库放到它的下面作为它的子项目,这样在qmake和编译的时候,只需要对总的动态链接库做操作,而不需要对每个…

银川网站建设有哪些公司网站要什么做

jxls使用excel公司这篇文章展示了如何使用jXLS将Excel文件解析为JavaBeans列表。 这是我编写的通用实用程序方法&#xff1a; /** * Parses an excel file into a list of beans. * * param <T> the type of the bean * param xlsFile the excel data file to parse * …

个旧市建设网站蓝色清新phpcms企业网站模板

油封也称为轴封&#xff0c;是各类机械中不可或缺的部件。它们主要用于密封机械设备中固定部件和移动部件之间的开口。大多数应用中较常用的油封是橡胶壳油封或金属壳油封。 橡胶壳油封广泛用于存在金属壳油封因热膨胀而失效的风险的应用中。橡胶外壳油封不会生锈&#xff0c;…

云主机怎么上传网站网站建设管理工作情况的通报

阿里云服务器可以干嘛&#xff1f;能干啥你还不知道么&#xff01;简单来讲可用来搭建网站、个人博客、企业官网、论坛、电子商务、AI、LLM大语言模型、测试环境等&#xff0c;阿里云百科aliyunbaike.com整理阿里云服务器的用途&#xff1a; 阿里云服务器活动 aliyunbaike.com…

网站二级菜单模板湖南电子科技网站建设

DB_RECOVERY_FILE_DEST参数是默认的flashrecovery area的路径&#xff0c;里面存放有归档日志、闪回日志以及rman的备份文件等文件。LOG_ARCHIVE_DEST_n参数是存放归档日志的路径&#xff0c;n表示1~10的一个整数&#xff0c;由于归档日志在recovery的时候担当了重要的角色&…

商标查询网站建设网站添加后台

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十三天【C语言文件操作】_高高的胖子的博客-CSDN博客 1 . 程序的翻译环境和执行环境 在ANSI C(C语言标准)的任何一种实现中&#xff0c;存在两个不同的环境。 &#xff0…

windows2012iis网站默认设置wordpress博客 知乎

实现效果 DAC输出的电压 同过电压表测量电压 1.DAC配置的步骤 初始化DAC时钟。配置DAC的GPIO端口。设置DAC的工作模式&#xff08;例如&#xff0c;是否使用触发功能&#xff0c;是否启用DAC中断等&#xff09;。启动DAC。 2常用的函数 函数 HAL_DAC_Start() - 开启指定…

网上如何建网站卖量具网站建设外包公司招聘

目录 二、从回归到线性分类模型&#xff1a;分类 3.分类模型损失函数推导——极大似然估计法 &#xff08;1&#xff09;二分类损失函数——极大似然估计 &#xff08;2&#xff09;多分类损失函数——极大似然估计 4.模型损失函数推导新视角——交叉熵 &#xff08;1&#x…

用typecho做的网站提供网站建设哪家好

目录 1.对真实值类别编码&#xff1a;2.预测值&#xff1a;3.目标函数要求&#xff1a;4.使用Softmax模型将输出置信度Oi计算转换为输出匹配概率y^i&#xff1a;5.使用交叉熵作为损失函数&#xff1a;6.代码实现&#xff1a; 1.对真实值类别编码&#xff1a; y为真实值&#xf…

桂林网站优化公司企业品牌类网站有哪些

doi&#xff1a;10.11884/HPLPB202335.230026 大视场中的目标丢失后需要再次检测&#xff0c;但是大视场的检测比较耗时。但是根据实验发现丢失目标通常发生在无人机运动区域的320x320范围内&#xff0c;所以设计辅助网络&#xff0c;当目标丢失后&#xff0c;以320x320区域图像…

二手车网站模板建设做营销的网站推广

Pandas 是数据科学社区中使用最广泛的库之一&#xff0c;它是一个强大的工具&#xff0c;可以进行数据操作、清理和分析。 本文将提供最常用的 Pandas 函数以及如何实际使用它们的样例。我们将涵盖从基本数据操作到高级数据分析技术的所有内容&#xff0c;到本文结束时&#xf…

长兴县建设管理网站免费注册企业网站

原题地址 解法一 排序贪心即可。思想为先计算出每一个怪兽到达城市的时间&#xff0c;然后排序&#xff0c;有小到大进行消灭&#xff0c;此时的下标可视作时间。当怪兽到达城市的时间超过或等于当前时间时&#xff0c;即已经到达了城市&#xff0c;游戏失败&#xff0c;下标…

创建众筹网站舟山市建设工程质量监督站网站

题目列表 3079. 求出加密整数的和 3080. 执行操作标记数组中的元素 3081. 替换字符串中的问号使分数最小 3082. 求出所有子序列的能量和 一、求出加密整数的和 按照题目要求&#xff0c;直接模拟即可&#xff0c;代码如下 class Solution { public:int sumOfEncryptedInt…

企业建站的作用是什么wordpress元素

需求任意输入3个整数&#xff0c;对这3个整数由小到大进行排序&#xff0c;并将排序后的结果输出。源码// // author: 冲哥 // date: 2021/5/7 13:37 // description: 实现对这3个整数由小到大进行排序 #include int main() {int num1, num2, num3, temp;printf("请输入3个…

ui设计工资怎么样优化wordpress访问速度

流水账日记&#xff08;哈哈&#xff09; 今天没课&#xff0c;早上好好的睡了个懒觉&#xff08;虽然还是很困- -&#xff09;&#xff1b; 哥几个把昨天买的排骨洗了做了个排骨汤&#xff0c;虽然不如家里做的好吃&#xff0c;但对此时的我们来说已经是美味了&#xff0c;晚…

做网站推广怎么跟客户沟通新乡建设网站公司

近年来&#xff0c;我们见证了数据可视化软件呈现出明显的免费化趋势。这个趋势的背后隐藏着许多关键原因&#xff0c;影响着整个数据行业的发展和走向。为何数据可视化软件开始朝着免费方向发展&#xff1f;让我们一同深入探讨。 普及数字化需求&#xff1a; 数字化已经深入到…

Asp.net网站开发分析互联网保险发展现状分析

昨天参加了华为南研所校招的机试&#xff0c;一共三道题&#xff0c;第一题很简单&#xff0c;输入一个字符串格式的日期&#xff0c;年-月&#xff0c;输出该月有多少天&#xff0c;主要注意闰年&#xff08;&#xff08;%40&&%100&#xff01;0&#xff09;||%4000&a…