js兵器谱之魔法召唤师:call / apply

ps:以下为笔者在爬莲花山时,大脑某些神经元突起闪现火花,最后转换为一堆文字片段

当卷福,or不,应该是当奇异博士(doctor strange)被 ancient one扔在珠穆朗玛山顶快要冻死的时候,情急之下,他终于召唤出了传送门。

魔法的世界,无处不在,作为麻瓜的我,学了js后,猛然间发现,js中居然也是魔法的一部分。

call/apply,其实是代码重用在js中的一个重要体现。

这两货是函数自带的方法。

函数,本质上是一堆打包在一块的代码语句,能实现某种功用。

js中的函数,又是对象。

啥是对象呢?

譬如,我从狗东买了包核桃,店家贴心地随着了一个夹核桃的钳子。

核桃既是要处理的数据,处理核桃的目的是最终能吃到里面的肉。

钳子,则是处理数据的工具,(方法),每调用钳子一次,就可夹碎一至多个核桃,不等。

似乎有点扯远了,,,

js的作者,先天性地给函数额外赠送了2个方法:call apply

它们都接受两个参数,上下文和参数数组。

上下文,英文为 context,这可是个好词,值得咀嚼再三。

它,就是 powershell实战一书作者据说的场景,英文为 scenario。

给call/apply传递任何上下文,则可把函数召唤到此场景中运用。

仿佛,你买了台空调,此时,你的上下文,或者说场景,就是你的家

空调安装师傅,则是函数

发送你家地址上门时间给师傅,则如果传递上下文给师傅

师傅登门,安装好空调。走人。

-----------------------------------------------------------------

忽然间明白为什么古代的法师举行仪式画符完毕,总要喊上一嗓子:太上老君,急急如律令。

林正英在捉妖前,也总要穿上正装口念符咒。

圣斗士星矢变身前也总要bilibala一堆。

昨晚看开门大吉,某服装设计师被爆料说设计前总要正襟危坐,不然没灵感。

so,写js代码前,是不是也应该要念上啥咒语呢?

“燃烧吧,火鸟” 这是我想及此时脑子里蹦出的第一个词语

----------------------------------------------------------------------------

有人说,天下文章一大抄。

这话用到编程的世界,叫代码重用。

c++中,类是代码重用的一大重要体现。

js6之前没有类

有了代码重用,我们也就没必要重复造轮子了。

----------------------------------------------------------------------------

我又想到了函数绑定和函数柯里化

实现中,slice函数被多次召唤。

  

时间: 2024-10-12 17:59:38

js兵器谱之魔法召唤师:call / apply的相关文章

关于js的一些关键知识点(call,apply,callee, caller,clourse,prototypeChain)

可能不少学习javascript在使用call,apply,callee时会感到困惑,以下希望对于你有所帮助: 1.~~~call ,apply是函数(函数对象)的方法:callee是函数arguments对象的属性 引用函数自身 2.~~~call,apply改变上下文对象this的指向 3.~~call apply方法让函数作为另一个对象的方法被调用 4.~~ apply方法只能接受数组作为参数 >> call f.call(o,1,2) 等同于o.m = f;o.m(1,2);例1:fu

JS中的call()方法和apply()方法用法总结

JS中的call()方法和apply()方法用法总结  : 参考   :     https://blog.csdn.net/ganyingxie123456/article/details/70855586 原文地址:https://www.cnblogs.com/wfblog/p/9169026.html

详解js的bind、call、apply

详解js的bind.call.apply 说明 虽然bind.call.apply都是js很基础的一块知识,但是我从未认真总结过这三者的区别. 由于公司后端是用的微服务架构,又没有中间层对接,导致前端这边非常难于处理接口数据. 于是我在项目初期封装了一套薄弱的api方法充当中间层的作用,还有为了让后端接口字段命名统一,也单独封装了一套方法用来统一每个微服务字段返回名. 但是,随着业务的增加,代码出现强耦合现象,到最后薄弱的中间层已经撑不住了,连代码的审视都变得很麻烦. 最后不得以重新设计这套ap

js中bind、call、apply函数的用法

最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web 的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站.但真正大规模的使用 js 这还是第一次.我也是初生牛犊不怕虎,这次服务器居然抛弃 C++ 和 lua 的正统搭配,而尝试用 nodejs 来写游戏服务器,折腾的自己要死要活的我也是醉了. 在给我们项目组的其他程序介绍 js 的时候,我准备了很多的内容,但看起来效果不大,果然光讲还是不行的,必须动手.

js中继承的方法总结(apply,call,prototype)

一,js中对象继承 js中有三种继承方式 1.js原型(prototype)实现继承 代码如下: <SPAN style="<SPAN style="FONT-SIZE: 18px"><html> <body> <script type="text/javascript"> function Person(name,age){ this.name=name; this.age=age; } Person

【 js 基础 】为什么 call 比 apply 快?

这是一个非常有意思的问题. 在看源码的过程中,总会遇到这样的写法: 1 var triggerEvents = function(events, args) { 2 var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2]; 3 switch (args.length) { 4 case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx);

JS 函数中的arguments,call,apply

JS 函数定义的时候的参数和调用时的关系调用时实际传递的参数可以比定义的参数多或者少,见下面的两个例子 <script> function test(a,b,c){ console.log(a); } test('a'); test('a','b','c'); </script> <script> function test(a){ console.log(a); } test('a'); test('a','b','c'); </script> JS的方法

js中bind,call,apply方法的应用

最近用js的类写东西,发现一个无比蛋疼的事,那就是封装的类方法中的this指针经常会改变指向,失去上下文,导致程序错误或崩溃. 比如: function Obj(){ this.type = "obj";}Obj.prototype = { show : function (){ etTimeout(function (){ console.log(this.type); },300) } var obj = new Obj();obj.show();  //undefined 所幸伟

JS数组追加数组采用push.apply的坑(转)

JS数组追加数组没有现成的函数,这么多年我已经习惯了a.push.apply(a, b);这种自以为很酷的,不需要写for循环的写法,一直也没遇到什么问题,直到今天我要append的b是个很大的数组时才遇到了坑. 1 2 3 a = new Array();     b = new Array(125624);                     a.push.apply(a, b); 以上的代码在mac的chrome下抛出了如下的异常 1 Uncaught RangeError: Maxi