Javascript TypeError:这是未定义的

Javascript TypeError:这是未定义的,javascript,ecmascript-harmony,Javascript,Ecmascript Harmony,当我使用已定义的对象、其有效方法和一些参数调用foo时,它显示: TypeError:这是未定义的。 这是什么意思 我认为this在这里很重要,因为我正在使用apply,它的第一个参数将在调用的方法中用作this。但是在这里,obj是有效的,它甚至不调用所需的方法。甚至在之前就发现了错误 (…args表示在obj和method之后传递给foo的任何额外参数将被推入一个数组args,该数组可由foo使用) 编辑:…args有效。是ES6 编辑:我的代码似乎很好。我试图检查并查看调用的函数是否有错误

当我使用已定义的对象、其有效方法和一些参数调用
foo
时,它显示:
TypeError:这是未定义的。

这是什么意思

我认为
this
在这里很重要,因为我正在使用
apply
,它的第一个参数将在调用的方法中用作
this
。但是在这里,
obj
是有效的,它甚至不调用所需的方法。甚至在之前就发现了错误

…args
表示在
obj
method
之后传递给
foo
的任何额外参数将被推入一个数组
args
,该数组可由
foo
使用)

编辑:
…args
有效。是ES6

编辑:我的代码似乎很好。我试图检查并查看调用的函数是否有错误。如果是这样的话,我很抱歉

编辑:很抱歉,问题出在正在调用的方法上。我说的不是这样,但我很困惑

里面有另一个回调

function foo(obj, method, ...args) {
  if (!(method in obj)) return null;
  try {
    alert(!!obj); //shows true
    return obj[method].apply(obj, args);
  }
  catch (e) {
    alert(e);
  }
}
这个
显然没有定义,因为它没有引用对象

我把你的函数改成了这个。首先,我们缩小参数的范围,以确保它们的类型正确。我们需要一个
obj
和一个
方法
。此外,
obj[method]
最好是一个函数,因为我们试图调用它

array.forEach(function (a) { // do something with 'this'});
我不确定ES6是如何工作的,也没有办法测试它,但这应该会继续工作。如果您可以让它在不使用的情况下工作,那么这是一个简单的更改(删除这一行并添加一个参数)

我们可以给它一个
来测试它

  var args = Array.prototype.slice.call(arguments, 2);
  return obj[method].apply(obj, args);e);
}
问问你是否需要进一步的解释

我把你的函数改成了这个。首先,我们缩小参数的范围,以确保它们的类型正确。我们需要一个
obj
和一个
方法
。此外,
obj[method]
最好是一个函数,因为我们试图调用它

array.forEach(function (a) { // do something with 'this'});
我不确定ES6是如何工作的,也没有办法测试它,但这应该会继续工作。如果您可以让它在不使用的情况下工作,那么这是一个简单的更改(删除这一行并添加一个参数)

我们可以给它一个
来测试它

  var args = Array.prototype.slice.call(arguments, 2);
  return obj[method].apply(obj, args);e);
}

只要问问你是否需要进一步的解释。

你的代码中真的有
…args
?这是一个语法错误,除非您使用的是ES6(但您至少应该告诉我们)。如果我将
…args
更改为
args
并传递一个数组,它就可以正常工作。@FelixKling,我正在使用ES6。对不起,我没告诉你你是怎么执行代码的?本机使用Node.js还是先转换到ES5?@FelixKling,我使用的是Mozilla框架。我不知道它是如何在内部发生的。我应该写我最后的编辑作为答案还是删除这个问题?你的代码中真的有
…args
?这是一个语法错误,除非您使用的是ES6(但您至少应该告诉我们)。如果我将
…args
更改为
args
并传递一个数组,它就可以正常工作。@FelixKling,我正在使用ES6。对不起,我没告诉你你是怎么执行代码的?本机使用Node.js还是先转换到ES5?@FelixKling,我使用的是Mozilla框架。我不知道它是如何在内部发生的。我应该写我最后的编辑作为答案还是删除这个问题?你能解释一下OP的代码有什么问题吗?我的意思是,你提出这个改变肯定有原因。你能解释一下OP的代码有什么问题吗?我的意思是,你提出这个改变肯定有原因。