2.13 invoke

2.13.1 语法:

_.invoke(list, method, *args)

2.13.2 说明:

每个list属性值都执行method方法,根据method方法返回一个数组。

  • list可以为数组,对象,字符串和arguments
  • method是一个方法,可为方法名,也可为自定义方法
  • *args是无穷个参数(下面会详细做讲解)

2.13.3 代码示例:

示例一:invoke会根据不同的method方法对list做出不同的处理(将对list, method同时做出示例)

var result;

// 操作数组(对数组中的每个数组执行join方法把数组中的所有元素放入一个字符串)
result = _.invoke([[5, 1, 7], [3, 2, 1]], 'join');
console.log(result); //=> ["5,1,7", "3,2,1"] // 操作对象(对象的每个属性值执行toFixed方法保留两位小数点)
result = _.invoke({x: 11.111, y: 22.2}, 'toFixed', 2);
console.log(result); //=> ["11.11", "22.20"] // 操作字符串(将字符串分解为一个数组,对这个数组中的每个值执行toUpperCase方法)
result = _.invoke('abc', 'toUpperCase');
console.log(result); //=> ["A", "B", "C"] //操作arguments
function abc() {
result = _.invoke(arguments, 'toFixed', 1);
console.log(result); //=> ["1.0", "2.0", "3.0"]
}
abc(1, 2, 3);

示例二:method方法

var result;

// method也可直接传递方法
result = _.invoke([[5, 1, 7], [3, 2, 1]], Array.prototype.join);
console.log(result); //=>["5,1,7", "3,2,1"] // 自定义method方法(需要有返回值)
result = _.invoke([1, 2, 3], function (a) {
return a + this; // this是每个属性值
}, 3);
console.log(result); //=> [4, 5, 6]

示例三:args是无穷个参数(根据示例一中的例子,相信你已经知道args的作用了,示例一中的例子中只是传了一个参数,那如何传两个、三个、甚至更多参数呢?);请看下面的例子。

// 截取数组中的每个字符串位置从2开始4结束
var result = _.invoke(['abcde', '123456'], 'slice', 2, 4);
console.log(result); //=> ["cd", "34"]

2.13.4 method方法为空、非方法、没有返回值会返回什么呢?

var result;

// method为空
result = _.invoke([1, 2, 3]);
console.log(result); //=> [undefined, undefined, undefined] // method非方法
result = _.invoke([1, 2, 3], null);
console.log(result); //=> [undefined, undefined, undefined] // method没有返回值
result = _.invoke([1, 2, 3], function (){ });
console.log(result); //=> [undefined, undefined, undefined]

2.13.5 参数传递错误:

示例一:method非方法而是一个字符

var result =  _.invoke([{ a: 1 }], 'a');
console.log(result); //=> Uncaught TypeError: func.apply is not a function

underscorejs-invoke学习的更多相关文章

  1. 不学就吃亏的underscorejs类库学习示例 ——(集合篇)

    underscorejs是一个很不错的类库,我的很多项目都引用了这个类库,的确可以带来很多方便. 记得我当初学的时候,看underscorejs的api是看的一知半解的,甚至不明白api里的conte ...

  2. C#之Invoke学习

    C#中invoke和beginInvoke的使用 1.Control类中的invoke和beginInvoke的定义 invoke的含义是:在拥有此控件的基础窗口句柄的现呈上同步执行指定的委托(同步) ...

  3. .NET学习之路----我对P/Invoke技术的理解(一)

    看了P/Invoke技术的介绍,于是想写下点东西,东西包含两个部分:知识的纪录和我的理解及疑问. r托管代码中调用非托管API函数的过程 1.定位包含API的DLL: 2.载入DLL 3.找到DLL中 ...

  4. C#学习之在辅助线程中修改UI控件----invoke方法

    Invoke and BeginInvoke 转载地址:http://www.cnblogs.com/worldreason/archive/2008/06/09/1216127.html 在Invo ...

  5. 学习AOP之认识一下Spring AOP

    心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...

  6. Java学习之反射机制及应用场景

    前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框 ...

  7. Linux学习之探索文件系统

    Linux,一起学习进步-    ls With it, we can see directory contents and determine a variety of important file ...

  8. Linux.NET学习手记(8)

    上一回合中,我们讲解了Linux.NET面对OWIN需要做出的准备,以及介绍了如何将两个支持OWIN协议的框架:SignalR以及NancyFX以OwinHost的方式部署到Linux.NET当中.这 ...

  9. WCF学习之旅—HTTP双工模式(二十)

    WCF学习之旅—请求与答复模式和单向模式(十九) 四.HTTP双工模式 双工模式建立在上文所实现的两种模式的基础之上,实现客户端与服务端相互调用:前面介绍的两种方法只是在客户端调用服务端的方法,然后服 ...

  10. Java学习之注解Annotation实现原理

    前言: 最近学习了EventBus.BufferKinfe.GreenDao.Retrofit 等优秀开源框架,它们新版本无一另外的都使用到了注解的方式,我们使用在使用的时候也尝到不少好处,基于这种想 ...

随机推荐

  1. Nodejs in Visual Studio Code 07.学习Oracle

    1.开始 Node.js:https://nodejs.org OracleDB: https://github.com/oracle/node-oracledb/blob/master/INSTAL ...

  2. POJ 2376 贪心

    题意:FJ希望它的牛做一些清洁工作.有N只牛和T个时间段,每只牛可以承担一段时间内的工作.FJ希望让最小数量的牛覆盖整个T,求出其数量.若无法覆盖整个T,则输出-1. 分析:首先要注意T表示T个时间段 ...

  3. 付出半个小时的笔误级BUG

    一开始,我为了偷懒将所有的任务全都压在了一个浮动指针上: for (; CCPtr->S != NULL; CCPtr->S = CCPtr->S->next) // for ...

  4. xp多网卡静态路由设置方法

    xp多网卡静态路由设置方法 一.多个IP都在同一网段或VALN.这类情况没什么好说的,在各块网卡的本地连接属性里设置好IP地址.子网掩码和默认网关即可. 二.多个IP属于不同网段或VLAN.这时如果按 ...

  5. selenium webdriver python 操作IE浏览器

    Step1:下载IEDriverServer 下载路径:http://selenium-release.storage.googleapis.com/index.html 我下载的是2.48版本的IE ...

  6. [转载]Web前端和后端之区分,以及面临的挑战

    原文地址:Web前端和后端之区分,以及面临的挑战[转]作者:joyostyle 在我们实际的开发过程中,我们当前这样定位前端.后端开发人员. 1)前端开发人员:精通JS,能熟练应用JQuery,懂CS ...

  7. redis 集群

    http://www.linuxidc.com/Linux/2015-08/121845.htm Redis3.0版本之后支持Cluster,具体介绍redis集群我就不多说,了解请看redis中文简 ...

  8. 关于node升级到7.0,无法gulp alljs的问题

    http://stackoverflow.com/questions/40308623/cannot-find-module-internal-fs-afer-upgrading-to-node-7 ...

  9. Python判断上传文件类型

    在开发上传服务时,经常需要对上传的文件进行过滤. 本文为大家提供了python通过文件头判断文件类型的方法,非常实用. 代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  10. JAX-WS + Spring 开发webservice

    通过几天的时间研究了下使用jax-ws来开发webservice,看了网上的一些资料总结出jax-ws的开发大概分为两种. 以下项目使用的spring3.0,jar包可以到官网下载 第一种:使用独立的 ...