无法访问Typescript中的对象

永远好奇

我无法从函数访问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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法访问Typescript中的对象属性值

来自分类Dev

无法访问 TypeScript 中的模型元素

来自分类Dev

无法访问JS对象中的值

来自分类Dev

我无法访问Java中的对象

来自分类Dev

无法访问UIPanGestureRecognizer中的对象

来自分类Dev

无法访问数组Java中的对象

来自分类Dev

无法访问jquery中的对象(prevObject?)

来自分类Dev

无法访问存储在ArrayList中的对象

来自分类Dev

无法访问JS对象中的值

来自分类Dev

无法访问Javascript对象中的变量

来自分类Dev

JavaScript:无法访问对象中的数组

来自分类Dev

无法访问JSON对象中的值

来自分类Dev

无法访问对象中的继承属性

来自分类Dev

无法访问Controller中对象的属性

来自分类Dev

无法访问Laravel中的对象属性

来自分类Dev

无法访问 Laravel 中的对象属性

来自分类Dev

无法访问数组中的 javascript 对象

来自分类Dev

无法访问对象中的值

来自分类Dev

无法访问对象

来自分类Dev

无法访问Angular.io TypeScript组件中的属性对象

来自分类Dev

无法访问对象 AngularFire2/Typescript 的属性

来自分类Dev

无法访问和对象中的对象中的数据

来自分类Dev

我无法访问对象数组中的嵌套对象

来自分类Dev

顶层对象中的条件对象无法访问合并的配置

来自分类Dev

无法访问对象实例

来自分类Dev

无法访问对象的数组

来自分类Dev

无法访问对象属性

来自分类Dev

无法访问数组对象

来自分类Dev

无法访问ejs中数组中的单个对象