我是一个数组:
var allchildsAr = new Array();
并且我用一个具有parent
属性(对象)和chlds
属性的对象填充它,这是一个数组。
以下是填充数组的代码:
Ti.API.info("*****allchildsAr["+level+"] is null and "+elmn+" children will be added to it ");
allchildsAr[level] = new Array({parent:elmn,chlds:elmn.getChildren()});
以下是我在添加后尝试显示数组的方法:
Ti.API.info("*****allchildsAr["+level+"] after add");
allchildsAr[level].forEach(logArrayJsonElements);
logArrayJsonElements
方法如下:
function logArrayElements(elemnt, indx, array) {
Ti.API.info("*****Element at [" + indx + "] : " + elemnt.id);
}
function logArrayJsonElements(elemnt, indx, array) {
Ti.API.info("*****Element at [" + indx + "] : " + elemnt.parent.id);
elemnt.chlds.forEach(logArrayElements);
}
这样可以正常工作,但我想要的是通过logArrayElements
传递父元素,这样我就可以将它显示为数组显示元素的父元素(以后再用它做另外的事情.. )
function logArrayElements(elemnt, indx, array, parent) {
Ti.API.info("*****Element at [" + indx + "] : " + elemnt.id+" child of :"+parent);
}
现在我感到困惑,因为当logArrayElements
在forEach
内被调用时,它不会接受参数,并且它们会被隐式传递,如果我添加parent
}因为我这样做是为了另一个参数(通常是element
参数),无论如何我没有传递任何参数,所以我将如何获得函数内的parent
并使{ {1}}像其他参数一样传递它?
答案 0 :(得分:5)
您可以将forEach
行修改为:
function logArrayJsonElements(elemnt, indx, array) {
Ti.API.info("*****Element at [" + indx + "] : " + elemnt.parent.id);
elemnt.chlds.forEach(function (element, index, arr) {
logArrayElements(element, index, arr, elemnt.parent.id);
});
}
答案 1 :(得分:2)
好吧,如果element
已经有parent
属性,那么为什么不在element.parent
中使用logArrayElements
?
假设元素的数据结构不同,那么bind
也部分适用,所以你可以这样做:
function logArrayElements(parent, element, index, array) {
console.log("Element at [%s] : %s child of %s", index, element.id, parent);
}
function logArrayJsonElements(element, index, array) {
element.chlds.forEach(logArrayElements.bind(null, element.parent));
}
答案 2 :(得分:1)
在logArrayJsonElements
绑定logArrayElements
内,parent
属性设置为parent
function logArrayJsonElements(elemnt, indx, array) {
Ti.API.info("*****Element at [" + indx + "] : " + elemnt.parent.id);
elemnt.chlds.forEach(logArrayElements.bind({parent: elemnt.parent}));
}
logArrayElements.bind({parent: elemnt.parent})
将返回一个新的Function
对象,其上下文在调用时将设置为{parent: elemnt.parent}
,允许您使用parent
访问this.parent
对象}。
修改logArrayElements
以删除parent
参数并使用this.parent
访问父对象:
function logArrayElements(elemnt, indx, array) {
Ti.API.info("*****Element at [" + indx + "] : " + elemnt.id+" child of :" this.parent);
}