我在一个角度分量内具有此功能。一旦尝试查询“ myData.Order3”数组,就无法从“查找”功能中访问“此”。 'this'报告为未定义,而父函数中其他对'this'的引用也可以。
这显然是一个范围确定的问题,但是在解决它时遇到了问题。
public toggle():void {
this.freq.toggle();
this.checkState().subscribe(response => {
console.log(this.freq.frequency);
this.myData = response as ArrayCast;
if (this.myData.Order3.find(function(ele) {
return ele == this.freq.frequency; // <= "this" reports as undefined
})){
this.toggleStyle="ui-button-danger";
}
console.log(this.myData);
});
}
答案 0 :(得分:1)
使用Lambda表达式=>
代替function
if (this.myData.Order3.find((ele) => ele === this.freq.frequency))
答案 1 :(得分:1)
尝试一下:
public toggle():void {
this.freq.toggle();
this.checkState().subscribe(response => {
console.log(this.freq.frequency);
this.myData = response as ArrayCast;
if (this.myData.Order3.find((ele) => ele == this.freq.frequency)){
this.toggleStyle="ui-button-danger";
}
console.log(this.myData);
});
}
答案 2 :(得分:0)
这是因为引起错误的this
是未引用同一对象。幸运的是,有几种方法可以解决此问题。
=>
函数,因为它们在创建时不会绑定this
。 (此外,当您调用subscribe
函数时,您已经使用了它。 this.myData.Order3.find((ele) => ele === this.freq.frequency)
this
的引用,以便您可以引用回同一对象。。
function foo() {
var that = this;
function bar() {
console.log(that);
}
}
答案 3 :(得分:0)
虽然这里给出了正确的答案,但是没有人解释原因。当使用dependencies {
...
implementation project(':react-native-fbsdk')
}
实际上是anonymous function
时,因此您正在为Object
创建新的作用域,这就是我们失去“期望的” this
范围的原因。为this
分配适当范围的方法很少。我认为,最干净的方法是使用上面提到的arrow function expression,以保持this
的当前范围。还有一种使用this
的方法,该方法只是将当前作用域绑定到.bind(this)
,所以看起来像
function
这是兼容性的好方法,因为箭头函数是array.find(function(el) { ... }.bind(this));
表达式,因此并不是每个浏览器都可以正确处理此问题,因此,如果您不使用polyfill(但是使用angular时,您不必担心这样)最好使用ES6
。
还有第三种选择,例如.bind(this)
之类的某些方法具有第二个参数array.find, array.forEach...
,这仅表示您可以在其中传递thisArg
,这将是{{1} }
Object
this
if (this.myData.Order3.find(ele => ele == this.freq.frequency))