有没有办法确定参数是否是JavaScript中的方法?
有没有办法检查传入函数的参数是否是方法 例如,我想确定函数内部的输入是方法还是独立函数:有没有办法确定参数是否是JavaScript中的方法?,javascript,methods,Javascript,Methods,有没有办法检查传入函数的参数是否是方法 例如,我想确定函数内部的输入是方法还是独立函数: 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 `${i
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()
所做的事情,但我不知道如何使用参数而不是硬编码字符串来完成
我玩弄了
JSON.stringify
和.toString()
,但它们似乎只对集合
和fct
的全部内容进行了stringify,而不是它们的名称。使用fct.name
函数isMethod(集合,fct){
log(`fct.name='${fct.name}`);
返回(集合类型[fct.name]=“函数”);
}
函数非方法CT(a,b){
返回a+b;
}
var object1={
方法fct(a,b){
返回a+b;
}
};
var expectFalse=isMethod(object1,nonMethodFct);//假的
console.log(expectFalse);
var expectTrue=isMethod(object1,object1.methodFct);//真的
console.log(expectTrue)
方法.hasOwnProperty()
需要一个;i、 e.要检查的函数的名称,而不是函数本身。要在上面的代码中实现这一点,您可以在第3行执行以下collection.hasOwnProperty(fct.name)
。此外,您还需要检查该属性是否实际上是对象中的函数<代码>object1的类型[fct.name]==“函数”应该这样做。