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的代码有什么问题吗?我的意思是,你提出这个改变肯定有原因。