我有一个类HashTable,其中包含一个方法addItem,如果一个项目不存在并且已成功添加(我检查它正在工作),则返回true。
在下面的函数顶部,将创建一个新的HashTable对象。 嵌套函数应该使用此对象hashTable的addItem方法。 不幸的是,范围存在问题。在嵌套函数中,hashTable在编辑时不会被涂成蓝色,并且(实际上)在运行时会出现一条消息,指出addIten方法不存在。
function getHashTableFolders_(folder)
{
var hashTable = new HashTable();
function getFolderCollection_(folder)
{ // Recursively fill the hashTable
if (hashTable.addItem(folder) === true)
{
var subFolders = folder.getFolders();
var numSubFolders = subFolders.length;
for (var i=0; i<numSubFolders; i++) getFolderCollection_(subFolders[i]);
}
}
getFolderCollection_(folder); // Start the process
return hashTable;
}
如何在嵌套函数中引用对象hashTable并使用其方法addItem?
答案 0 :(得分:0)
你可以使这成为可能,只需在**
之前进行hashTable声明getHashTableFolders _
**功能,
var hashTable = new HashTable();
function getHashTableFolders_(folder)
{
function getFolderCollection_(folder)
{ // Recursively fill the hashTable
if (hashTable.addItem(folder) === true)
{
var subFolders = folder.getFolders();
var numSubFolders = subFolders.length;
for (var i=0; i<numSubFolders; i++) getFolderCollection_(subFolders[i]);
}
}
getFolderCollection_(folder); // Start the process
return hashTable;
}
答案 1 :(得分:0)
使用函数作用域对我来说很好,因为你没有在内部函数中重新定义hashTable
,所以作用域将使用对外部作用域的对象的回退。 http://jsbin.com/fedela/1/edit
(对于HashTable
和folder
使用Polyfill,因为它们不是由OP提供的):
var HashTable = function( ) {
var obj = {
folders: [],
addItem: function(x) { obj.folders.push( x.name ); return true; }
};
return obj;
};
var a = {
name: "a",
getFolders: function() { return [];}
};
var b = getHashTableFolders_({
name: "b",
getFolders: function() { return [a]}
});
将导致b.folders // ["b","a"]
答案 2 :(得分:0)
我将所有代码复制到新的GAS中(并在进行备份后)销毁了用于制作库的旧GAS。
新的GAS可以使用,所以我猜它与使用早期版本的库有关。
感谢所有人如此迅速地做出回应。