Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法读取属性';绑定&x27;绑定2个函数时的未定义值_Javascript - Fatal编程技术网

Javascript 无法读取属性';绑定&x27;绑定2个函数时的未定义值

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

我试图将var绑定到一些函数中,这样我就可以在内部函数中访问它

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关于函数的建议。