Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法确定参数是否是JavaScript中的方法?_Javascript_Methods - Fatal编程技术网

有没有办法确定参数是否是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]==“函数”应该这样做。