我有以下几点:
getitem: function(){
$this.users = $data.data;
$this.users = $this.users.filter( function(item) {
if(item.status === true ) {
if( item.children.length > 0 ){
item.children = this.getChildrem(item.children, true);
}
return item;
}});
},
getChildrem: function(node, estatus){
$children = node.filter( function(item) {
if(item.status === estatus ) {
if( item.children.length > 0 ){
item.children = this.getChildrem(item.children, estatus);
}
return item;
}});
return $children;
},这是一个简单的函数递归,我只是得到了状态为‘true’的所有项(父项和子项),但我遇到了这个错误:
Uncaught (in promise) TypeError: this.getChildrem is not a function为什么我收到这个错误?
发布于 2021-11-12 17:48:38
当您定义传递到node.filter中的函数时,this上下文将发生变化。您可以通过传入箭头函数或使用.bind来避免这种情况。
因此,不是
getChildrem: function(node, estatus){
$children = node.filter( function(item) {试试这个:
getChildrem: function(node, estatus){
$children = node.filter( (item) => {发布于 2021-11-12 18:04:30
这是因为回调函数使用的是全局作用域,而该对象在不同的作用域中
var obj = {
test(){
(function(){console.log(this);})(); //Prints global object
(()=>{console.log(this);})(); // prints local object
}
}您需要将该普通函数更改为箭头函数,因为箭头函数将捕获封闭范围
https://stackoverflow.com/questions/69947041
复制相似问题