我正在尝试运行以下代码:
public isDataValid(obj: any){
let isCriteriaValid = function (){
for(let element in obj){
if(!this.isStringOrObjectValid(element)){
return false
}
}
return true
}
return (obj != undefined) ? isCriteriaValid() : false
}
快速解释:
运行此函数可以通过检查对象中的所有元素来检查对象是否有效
我对";这个";上下文有点";擦除";。
这个问题是一个叫做scope的小问题。范围不是";擦除";,";这个";关键字指的是一个新的作用域。
isStringOrObjectValid
函数的作用域现在是它在其中声明的函数,它是局部变量。我通过将要运行函数的对象传递给三元语句来修复它。像这样:
let isCriteriaValid = function (service){
for(let element in obj){
if(!service.isStringOrObjectValid(element)){
return false
}
}
return true
}
return (obj != undefined) ? isCriteriaValid(this) : false
如果有人有更好的方法,我愿意了解这类范围问题。
您应该能够将作用域传递给变量,然后使用该
public isDataValid(obj: any){
**let that = this;**
let isCriteriaValid = function () {
for (let element in obj) {
if (!**that**.isStringOrObjectValid(element)) {
return false
}
}
return true
}
return (obj != undefined) ? isCriteriaValid() : false
}
但实际上,在这个时代,你应该使用ES6箭头函数,并且范围将得到维护。。。像这个
public isDataValid2(obj: any) {
let isCriteriaValid = () => {
for (let element in obj) {
if (!this.isStringOrObjectValid(element)) {
return false;
}
}
return true;
};
return obj !== undefined ? isCriteriaValid() : false;
}