设置为另一个对象的Javascript对象未定义
对于我的chrome扩展,我有一个名为storeGroup的函数,它返回一个对象。但是,在函数storeTabsInfo中,当我调用storeGroup并将其设置为另一个对象时,对象内部的部分是未定义的。该对象在storeGroup中已正确填充,因此我不确定为什么它未定义设置为另一个对象的Javascript对象未定义,javascript,object,google-chrome-extension,Javascript,Object,Google Chrome Extension,对于我的chrome扩展,我有一个名为storeGroup的函数,它返回一个对象。但是,在函数storeTabsInfo中,当我调用storeGroup并将其设置为另一个对象时,对象内部的部分是未定义的。该对象在storeGroup中已正确填充,因此我不确定为什么它未定义 function storeTabsInfo(promptUser, group) { var tabGroup = {}; chrome.windows.getCurrent(function(currentWindow)
function storeTabsInfo(promptUser, group)
{
var tabGroup = {};
chrome.windows.getCurrent(function(currentWindow)
{
chrome.tabs.getAllInWindow(currentWindow.id, function(tabs)
{
/* gets each tab's name and url from an array of tabs and stores them into arrays*/
var tabName = [];
var tabUrl = [];
var tabCount = 0;
for (; tabCount < tabs.length; tabCount++)
{
tabName[tabCount] = tabs[tabCount].title;
tabUrl[tabCount] = tabs[tabCount].url;
}
tabGroup = storeGroup(promptUser, group, tabName, tabUrl, tabCount); // tabGroup does not store object correctly
console.log("tabGroup: " + tabGroup.tabName); // UNDEFINED
chrome.storage.local.set(tabGroup);
})
})
}
function storeGroup(promptUser, group, name, url, count)
{
var groupObject = {};
// current count of group
var groupCountValue = group.groupCount;
var groupName = "groupName" + groupCountValue;
groupObject[groupName] = promptUser;
var tabName = "tabName" + groupCountValue;
groupObject[tabName] = name;
var tabUrl = "tabUrl" + groupCountValue;
groupObject[tabUrl] = url;
var tabCount = "tabCount" + groupCountValue;
groupObject[tabCount] = count;
var groupCount = "groupCount" + groupCountValue;
groupObject[groupCount] = groupCountValue + 1;
// successfully shows parts of groupObject
console.log("Final group: " + groupObject[groupName] + " " + groupObject[tabName] + " " + groupObject[tabUrl] + " " + groupObject[tabCount] + " " + groupObject[groupCount]);
return groupObject;
}
function storeTabsInfo(promptUser,组)
{
var tabGroup={};
chrome.windows.getCurrent(函数(currentWindow)
{
chrome.tabs.getAllInWindow(currentWindow.id,函数(tabs)
{
/*从选项卡数组中获取每个选项卡的名称和url,并将它们存储到数组中*/
var tabName=[];
var tabUrl=[];
var-tabCount=0;
对于(;tabCount
正如我在上面的评论中所说,您创建了带有组计数的groupObject
dict键,因此您应该再次使用它来访问它们或删除它们,如果您想再次使用它,尽管我认为这不是必需的,所以请使用:-
... ,tabGroup[tabName + group.groupCount]...
但是,如果您想在编写过程中轻松获得它,只需编写以下代码而不是您的代码:-
function storeGroup(promptUser, group, name, url, count)
{
var groupObject = {};
// current count of group
groupObject['groupName'] = promptUser;
groupObject['tabName'] = name;
groupObject['tabUrl'] = url;
groupObject['tabCount'] = count;
groupObject['groupCount'] = group.groupCount + 1;
// successfully shows parts of groupObject
console.log("Final group: " + groupObject['groupName'] +
" " + groupObject['tabName'] + " " + groupObject['tabUrl'] +
" " + groupObject['tabCount'] + " " +
groupObject['groupCount']);
return groupObject;
}
您的
groupObject
没有tabname
属性。当您尝试访问它时,tabGroup.tabName
会被取消定义。如果tabName
是一个包含属性名称的变量,您需要使用tabGroup[tabName]
访问它,您应该将所有属性与其组计数一起使用,因为您创建了带有组计数的groupObject
dict,所以您应该将它们与计数一起使用。console.log(“tabGroup:+tabGroup.tabName”);将不起作用,因为假设group.groupCount为1,则该属性将为tabName1,而不是tabName。