Javascript 无法读取属性';绑定&x27;绑定2个函数时的未定义值
我试图将var绑定到一些函数中,这样我就可以在内部函数中访问它Javascript 无法读取属性';绑定&x27;绑定2个函数时的未定义值,javascript,Javascript,我试图将var绑定到一些函数中,这样我就可以在内部函数中访问它 function checkIfIsFilter(currentfilters, parentSearch) { for (var group of currentfilters) { if (_.find(group.filters, {"search": parentSearch})) { return group.parentSearch || group.n
function checkIfIsFilter(currentfilters, parentSearch) {
for (var group of currentfilters) {
if (_.find(group.filters, {"search": parentSearch})) {
return group.parentSearch || group.name;
}
}
};
function checkIfSubtopic(currentfilters, memo, value, key) {
if (value.parentSearch) {
value.subtopicOf = checkIfIsFilter(value.parentSearch).bind(null, currentfilters);
}
memo[key] = value
return memo;
}
console.log(_.reduce(currentfilters, checkIfSubtopic.bind(null, currentfilters), {}));
这似乎破坏了函数,特别是在value.subtopicOf=
部分,错误消息为无法读取未定义的属性“bind”。我只想将currentfilters
引入最内部的函数,以便引用它。当我把它作为一个全局变量(可以直接引用checkIfIsFilter
函数中的currentfilters
)时,它工作得很好,但我无法在生产中使用它
我在这里有一把小提琴,我一直在那里工作:
不确定我在做什么是正确的,如果您有任何意见,我将不胜感激。谢谢你的阅读 让我们把它缩短一点
function checkIfIsFilter(currentfilters, parentSearch) {
return group.parentSearch || group.name;
}
function checkIfSubtopic(currentfilters, memo, value, key) {
value.subtopicOf = checkIfIsFilter(value.parentSearch).bind(null, currentfilters);
}
console.log(_.reduce(currentfilters, checkIfSubtopic.bind(null, currentfilters), {}));
请注意,checkIfIsFilter
不返回函数,您正在执行此操作
checkIfIsFilter(value.parentSearch).bind();
您正在调用checkIfIsFilter
,它返回group.parentSearch
(或name
),返回值就是您试图绑定到的值
首先,如果您想使用this
值和参数调用函数,您可以使用call
、apply
,或者在您的情况下,直接调用它,因为this
值似乎并不重要
其次,看起来您正在尝试使用动态属性名,它只适用于括号表示法
function checkIfIsFilter(currentfilters, parentSearch) {
for (var group of currentfilters) {
if (_.find(group.filters, {"search": parentSearch})) {
return group[parentSearch] || group.name;
}
}
};
function checkIfSubtopic(currentfilters, memo, value, key) {
if (value.parentSearch) {
value.subtopicOf = checkIfIsFilter(value.parentSearch, currentfilters);
}
memo[key] = value
return memo;
}
console.log(_.reduce(currentfilters, checkIfSubtopic.bind(null, currentfilters), {}));
这里似乎不需要使用bind,因为thisArg没有真正被使用。Lodash提供了一个名为partial的不同函数,它可以精确地执行您试图执行的操作,尽管称为partial 我将代码的最后一行更改为:
console.log(_.reduce(currentfilters, _.partial(checkIfSubtopic, currentfilters)));
这里的示例:这个问题是否缺少AJAX、jquery或其他库标记?如果我是你,我可能也会遵循adeneo关于函数的建议。