如何解决如果实例不为空,则Lodash应用类实例函数
假设我们有以下示例:
class Person {
name: string;
firstname: string;
getFullName(separator: string) {
return name + separator + fisrt
}
}
const person = ..
const fullName = _.ifNotNull(person,value => value.getFullName('-'))
在lodash中是否存在与ifNotNull
函数等效的函数,该函数应用了对象参数中的函数。
解决方法
你可以使用 Lodash
事实上,Lodash 已经得到了你要找的函数,它叫做 _.invoke
。在上面的示例中,您可以编写:
const fullName = _.invoke(person,"getFullName","-");
它会按预期工作。那么,_.invoke
是如何工作的?
-
_.invoke
具有以下签名:_.invoke(object,path,[args])
。它调用对象内部路径(可以是嵌套路径以及方法名称)处的方法,并将this
绑定到对象。
我可以在浏览器中快速试用吗?
当然!我制作了一个 Codepen,您可以在其中尝试使用这种方法和其他方法直接在浏览器中执行相同的操作。只记得打开浏览器控制台查看测试结果!这是链接,您可以在 _.invoke
和 testcase1a()
中找到 testcase1b()
:
https://codepen.io/jhack_jos/pen/ExNVbWp
上面的表达式如何解析?
- 如果
person
未定义或person
没有名为getFullName
的方法,则表达式_.invoke(person,"-");
解析如下:
//STEP 1
const fullName = _.invoke(person,"-");
//STEP 2
const fullName = undefined;
- 如果定义了
person
,并且有一个getFullName
方法:
//STEP 1
const fullName = _.invoke(person,"-");
//STEP 2
const fullName = person.getFullName("-");
//STEP 3
const fullName = "surname-firstname";
警告
如果 person
有一个不是方法 getFullName
的属性,你会得到一个运行时错误!!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。