Например,
проверить, существует ли метод isCourage() в таком объекте.
isCourage()
puppy { ... goldenRetriever { ... hasCourage(){ ... } } }
Lodash может сделать трюк, но я не уверен, какой метод мне использовать.
С lodash у вас есть несколько функций, которые могут быть вам полезны:
Вы можете использовать _.isFunction с _.get:
_.isFunction
_.get
let obj = { foo:{ bar:{ fooBar: function(b) { return b } } } } console.log(_.isFunction(_.get(obj,'foo.bar.fooBar')))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
Вы также можете использовать _.result, чтобы сразу получить значение, и not care действительно, если это функция или нет._.result будет идти по пути, выполняя все, что является функцией , и возвращает окончательное значение:
_.result
not care
let obj = { foo:{ bar:{ fooBar: function(b='yay') { return b } } } } console.log(_.result(obj, 'foo.bar.fooBar'))
Вы можете использовать
_.get(puppy,'bar.goldenRetrieve.foo.hasCorauge.constructor') === Function
(bar и foo являются примерами, поскольку ... может привести к путанице, и .contructor должен вернуть Function, если это функция ...)
...
let obj = { foo:{ bar:{ myFn:function(b){return b;} } } } console.log(_.get(obj,'foo.bar.myFn.constructor')===Function); console.log(_.get(obj,'foo.bar.myFn2.constructor')===Function);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>