Agm*_*her 11 javascript lodash
鉴于我有这个代码:
if (_.isFunction(this.doSomething)) {
this.doSomething();
}
Run Code Online (Sandbox Code Playgroud)
因为loadingComplete是从父控制器传入的指令属性,可能并不总是提供,如果存在,是否有更简洁的单行方式来调用方法,而不重复方法名称?
就像是:
_.call(this, 'doSomething');
Run Code Online (Sandbox Code Playgroud)
从4.0.0版本开始,lodash提供了一种称为invoke:https : //lodash.com/docs/4.15.0#invoke的方法
var object = {
add: function(a, b) { return a + b }
};
_.invoke(object, 'add', 1, 2);
// => 3
_.invoke(object, 'oops');
// => undefined
Run Code Online (Sandbox Code Playgroud)
请注意,如果由于某种原因在您提供的键上除了功能以外还有其他东西,它仍然会爆炸。
@stasovlas的答案是正确的方法。
您一直在寻找的机器人:
_.get(this, 'doSomething', _.noop)()
Run Code Online (Sandbox Code Playgroud)
它是相当自我记录的,在功能上等同于:
if (this.doSomething) {
this.doSomething();
} else {
_.noop();
}
Run Code Online (Sandbox Code Playgroud)
如果要在整个代码库中重用此代码,可以使用mixin使其更具可读性和简洁性,然后将其烘烤到lodash中:
var runIfFunction = function(value) {
if (_.isFunction(value)) {
return value();
}
};
_.mixin({runIfFunction: runIfFunction});
Run Code Online (Sandbox Code Playgroud)
这允许您执行以下操作:
_.runIfFunction(this.doSomething);
Run Code Online (Sandbox Code Playgroud)
较新的 Javascript / Typescript 版本本身支持它
const result = someInterface.nullableMethod?.();
Run Code Online (Sandbox Code Playgroud)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining
(有关本机浏览器支持,请参见页面底部)
这有点难看,但你可以使用结果:
_.result({fn: this.doSomething}, 'fn');
Run Code Online (Sandbox Code Playgroud)