Есть ли способ проверить, является ли аргумент, переданный в функцию, методом ?
Например, я хочу определить внутри функции, является ли один из входных данных методом или автономная функция:
function isMethod(collection, fct) {
var isFct = (typeof fct === 'function');
var isProperty = (collection.hasOwnProperty(fct)); // doesn't work b/c fct = object1.methodFct, not methodFct
return `${isFct}, ${isProperty}`;
}
function nonMethodFct(a, b) {
return a + b;
}
var object1 = {
methodFct(a, b) {
return a + b;
}
};
console.log(typeof object1.methodFct === 'function' && object1.hasOwnProperty('methodFct')); // returns true
var expectTrueFalse = isMethod(object1, nonMethodFct); // returns true, false
console.log(expectTrueFalse);
var expectTrueTrue = isMethod(object1, object1.methodFct); // returns true, (false)
console.log(expectTrueTrue);
Поскольку ввод 'methodFct'
возвращает ошибку для неопределенного (потому что methodFct
скрыт внутри лексической области object1
), я должен ввести ее в нотации доступа к свойству (object1.methodFct
), которая нарушает проверку isProperty
внутри функции.
Другими словами, я хочу сделать то, что делает независимый console.log()
, но я не знаю, как сделать это с аргументом вместо жестко заданной строки.
I поиграл с JSON.stringify
и .toString()
, но они, казалось, только строчили все содержимое collection
и fct
, а не их имена.