无法读取 class 中未定义的 属性
Cannot read property of undefined in class
我是 javascript 的新手,谁能帮我弄清楚为什么这段代码不起作用?
我有一个class,它调用了一个cordova条码扫描函数。我有一个有效的示例,但是我希望能够分离出函数(结果)和函数(错误)并使用 onSuccess(结果)和 onFailure(错误)。
我不知道为什么会这样,所以如果有人能提供帮助那就太好了。
编辑:所以我更新了基于 Stradosphere 的代码,但是我仍然得到结果未定义的错误。
完整错误信息:
未捕获的引用错误:结果未在 barcodeScanner.scanBarcode(barcodeScanner.js:10)和 HTMLButtonElement.myFunction(main.js:18)
处定义
var me = this;
class barcodeScanner {
constructor() {
this._barcodeResult = 0;
}
scanBarcode() {
//THIS THROWS result is not defined error
cordova.plugins.barcodeScanner.scan(me.onSuccess(result), me.onFailure(error));
//THIS WORKS
cordova.plugins.barcodeScanner.scan(
function (result) {
me._barcodeResult = result.text;
alert("Barcode Scanned:" + me._barcodeResult);
},
function (error) {
alert("Scanning failed: " + error);
}
);
}
onSuccess(result) {
this._barcodeResult = result.text;
alert("Barcode Scanned:" + this._barcodeResult);
}
onFailure(error) {
alert("Scanning failed: " + error);
}
}
可能是您使用这个的范围问题。尝试:
var me = this; //(put this at class level)
cordova.plugins.barcodeScanner.scan(me.onSuccess, me.onFailure);
查看 docs,cordova.plugins.barcodeScanner.scan()
似乎希望您向其中传递一个函数。但是你是这样称呼它的:
cordova.plugins.barcodeScanner.scan(me.onSuccess(result), me.onFailure(error));
这是传递函数 .onSuccess(result)
的 结果 ,但 result
未定义,因此您收到错误消息。此外,您希望 this
成为 class 实例,但是通过将 me
定义为 class 之外的 this
,me
将不等于class 实例就像你想要的那样。但无论如何你都不需要它。
尝试传入函数:
cordova.plugins.barcodeScanner.scan((result) => this.onSuccess(result),(error)=> this.onFailure(error))
我是 javascript 的新手,谁能帮我弄清楚为什么这段代码不起作用?
我有一个class,它调用了一个cordova条码扫描函数。我有一个有效的示例,但是我希望能够分离出函数(结果)和函数(错误)并使用 onSuccess(结果)和 onFailure(错误)。
我不知道为什么会这样,所以如果有人能提供帮助那就太好了。
编辑:所以我更新了基于 Stradosphere 的代码,但是我仍然得到结果未定义的错误。
完整错误信息:
未捕获的引用错误:结果未在 barcodeScanner.scanBarcode(barcodeScanner.js:10)和 HTMLButtonElement.myFunction(main.js:18)
处定义var me = this;
class barcodeScanner {
constructor() {
this._barcodeResult = 0;
}
scanBarcode() {
//THIS THROWS result is not defined error
cordova.plugins.barcodeScanner.scan(me.onSuccess(result), me.onFailure(error));
//THIS WORKS
cordova.plugins.barcodeScanner.scan(
function (result) {
me._barcodeResult = result.text;
alert("Barcode Scanned:" + me._barcodeResult);
},
function (error) {
alert("Scanning failed: " + error);
}
);
}
onSuccess(result) {
this._barcodeResult = result.text;
alert("Barcode Scanned:" + this._barcodeResult);
}
onFailure(error) {
alert("Scanning failed: " + error);
}
}
可能是您使用这个的范围问题。尝试:
var me = this; //(put this at class level)
cordova.plugins.barcodeScanner.scan(me.onSuccess, me.onFailure);
查看 docs,cordova.plugins.barcodeScanner.scan()
似乎希望您向其中传递一个函数。但是你是这样称呼它的:
cordova.plugins.barcodeScanner.scan(me.onSuccess(result), me.onFailure(error));
这是传递函数 .onSuccess(result)
的 结果 ,但 result
未定义,因此您收到错误消息。此外,您希望 this
成为 class 实例,但是通过将 me
定义为 class 之外的 this
,me
将不等于class 实例就像你想要的那样。但无论如何你都不需要它。
尝试传入函数:
cordova.plugins.barcodeScanner.scan((result) => this.onSuccess(result),(error)=> this.onFailure(error))