我无法从函数访问Typescript的类中声明的对象。这是我所拥有的:
export class QUestions {
credentials:mysqlCredentials.MySQLCredentials;
sqlConnector:mysql.Mysql;
constructor() {
this.credentials = new mysqlCredentials.MySQLCredentials('192.168.249.139', 'dev', 'dev', 'test');
this.sqlConnector = new mysql.Mysql(this.credentials);
}
addQuestion(req, res) {
var q = ...<Lot of code over here> ;
this.sqlConnector.query(q, null); //Error shown for this line
res.send();
}
}
Error:
TypeError: Cannot call method 'query' of undefined
如果代码的结构如上所示,即在Typescript类中定义了sqlConnector变量,则会引发错误。如果我将sqlConnector放置在Typescript类之外,则可以正常工作。我需要解决此问题,因为我需要在类内部使用sqlConnector对象。
export class Questions {
credentials:mysqlCredentials.MySQLCredentials;
constructor() {
this.credentials = new mysqlCredentials.MySQLCredentials('192.168.249.139', 'dev', 'dev', 'test');
sqlConnector = new mysql.Mysql(this.credentials);
}
addQuestion(req, res) {
var q = ...<Lot of code over here> ;
sqlConnector.query(q, null); //Error shown for this line
res.send();
}
}
var sqlConnector;
您是否在新的上下文中调用该类(例如,使用事件处理程序)?
如果是这样,则this
成为事件的上下文,而不是类上下文。这也是TypeScript中也可能发生的常见JavaScript问题。
您可以通过多种方式解决范围问题:
如果使用箭头函数将函数分配给Questions类的成员,则它将始终使用类作用域。
export class Questions {
credentials:mysqlCredentials.MySQLCredentials;
sqlConnector:mysql.Mysql;
constructor() {
this.credentials = new mysqlCredentials.MySQLCredentials('192.168.249.139', 'dev', 'dev', 'test');
this.sqlConnector = new mysql.Mysql(this.credentials);
}
addQuestion = (req, res) => {
var q = ...<Lot of code over here> ;
this.sqlConnector.query(q, null); //Error shown for this line
res.send();
}
}
call
设置范围上下文这种替代解决方案意味着Questions类不必关心范围-如果从其他范围上下文调用该方法,则只需使用call
将问题实例分配为范围即可。
element.onclick = function () {
questions.addQuestion.call(questions, argA, argB);
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句