Javascript 为什么函数返回未定义,如何调试它?
我正在试验数据变量中的闭包和类,在下面的示例中,即使我在函数返回结果之前放置了一个Javascript 为什么函数返回未定义,如何调试它?,javascript,jquery,Javascript,Jquery,我正在试验数据变量中的闭包和类,在下面的示例中,即使我在函数返回结果之前放置了一个console.log(),但仍然没有定义。如果它没有附加到事件处理程序,它似乎可以工作。有人能告诉我为什么会发生这种情况,以及是否有办法确定错误到底发生在哪里?调试时,它直接从控制台日志转到错误,我不明白这有什么意义 要触发错误,请运行代码段并单击名称 $(“#personals”)中的相同函数。在IndividualsList()中调用数据('functions')时,可以链接数据并正常工作,但不能从事件侦听器
console.log()
,但仍然没有定义。如果它没有附加到事件处理程序,它似乎可以工作。有人能告诉我为什么会发生这种情况,以及是否有办法确定错误到底发生在哪里?调试时,它直接从控制台日志转到错误,我不明白这有什么意义
要触发错误,请运行代码段并单击名称
$(“#personals”)中的相同函数。在IndividualsList()
中调用数据('functions')
时,可以链接数据并正常工作,但不能从事件侦听器调用,然后结果将变得未定义
$(文档).ready(函数(){
var thisWindow=$(“#个人”);
变量随机名称=['Sonia Small','Kurt Archer','Reese Mullins','Vikram Rayner','Jethro Kaye','Suhail Randolph','Kaydon Crouch','Jamal Elliott','Herman Atkins','Sia Best','Kory Gentry','Fallon Sawyer','Zayyan Hughes','Ayomide Byers','Emilia Key','Jaxson Guerro','Gracey Frazier','Millie Mora','Akshay Parker','Margareta Emiliana];
生成的个人风险值=[];
函数生成器个人(名称){
返回{
个人姓名:姓名
};
}
功能独立列表(元素){
var列表=[];
this.add=函数(thisIndividual){
$(“#个人”).data('functions').init(元素,列表).add(thisIndividual);
}
this.refresh=函数(){
$(“#个人”).data('functions').init(元素,列表).refresh();
}
this.sort=函数(顺序){
$(“#个人”).data('functions').init(元素,列表).sort(顺序);
}
}
thisWindow.data('函数',(函数()){
var元素=$();
var列表=[];
返回{
添加:功能(此个人){
列表。推送(该个人);
返回thisWindow.data(“函数”);
},
init:函数(thisElement,thisList){
元素=此元素;
列表=此列表;
返回thisWindow.data(“函数”);
},
刷新:函数(){
var thisList=element.html(“”);
for(设i=0;ib.IndividualName)返回1*订单;
返回0;
});
console.log(thisWindow.data('functions'));
返回thisWindow.data(“函数”);
}
}
})());
for(设i=0;i<20;i++){
让nameNum=Math.floor(Math.random()*randomNames.length);
让thisClient=generateIndividual(randomNames[nameNum]);
generatedIndividuals.push(此客户端);
}
(功能(){
var targetElement=thisWindow.find('div.individuals-list');
var targetData={}
数据('individualsList',新的individualsList(targetElement));
targetData=targetElement.data('individualsList');
for(设i=0;i
。个人列表{
边框:1px实心;
光标:指针;
}
您引用了错误的
sort()
函数,因此调用该函数时不正确,因此返回undefined。然后对从sort返回的undefined函数调用refresh()。原因如下:
在IFFE中,您可以使用.data()在this窗口上设置data=new IndvidualsList
。find('div.individuals-list')
此代码:
thisWindow.find('div.individuals-list').data('individualsList')
返回实例化的IndividualsList对象:
IndividualsList = $1
add: function(thisIndividual)
refresh: function()
sort: function(fieldName, order)
IndividualsList Prototype
请注意sort()
函数的定义。此对象中的排序需要两个参数,fieldName
和order
;但是您调用sort()
,只传递order
这表示您对sort()函数的期望不正确,或者在该代码行(在单击处理程序中)提供了错误的排序函数
如何调试
此窗口。查找('div.individuals-list')。数据('individualsList')
function IndividualsList(element) {
var list = [];
this.add = function(thisIndividual) {
return $('#Individuals').data('functions').init(element, list).add(thisIndividual);
}
this.refresh = function() {
return $('#Individuals').data('functions').init(element, list).refresh();
}
this.sort = function(order) {
return $('#Individuals').data('functions').init(element, list).sort(order);
}
}
断点可能位于
IndividualsList()中的一个
的方法,因此可以注意到闭包返回所需的对象,而方法不返回。函数或方法的不同名称将有助于加强它们是分开的。哪一个?我看到IndividualsList
中的所有方法都没有返回语句…其他方法?哪个方法返回undefined?@JaromandaX我已经在问题中添加了澄清。@EKW$(“#个人”)中的排序。数据('functions')
,从事件侦听中的IndividualsList()
中调用