angular.js:Typescript 类构造函数“这是未定义的”

Posted

技术标签:

【中文标题】angular.js:Typescript 类构造函数“这是未定义的”【英文标题】:angular.js: Typescript class constructor "this is undefined" 【发布时间】:2018-05-19 17:09:33 【问题描述】:

我正在尝试创建一个简单的 TypeScript 类,但是当它被实例化时,我在构造函数中收到 this is undefined 错误。

类:

class MyClass 
    stuff: string;
    constructor()
        this.stuff = 'stuff';
    

app.config([MyClass]);

被编译成:

var MyClass = /** @class */ (function () 
    function MyClass() 
        this.stuff = 'stuff';
    
    return MyClass;
());
app_module_1.app.config([MyClass]);

为什么这不起作用?为什么this 未定义?根据我编写的示例和其他代码,这似乎是合适的语法。

我的代码的其余部分(有效):

export let app = angular.module('timeApp', [
    uirouter
]);

class MainController
    stuff: string;
    constructor()
        this.stuff = "TESTING";
    


app.controller('mainController', MainController);

【问题讨论】:

它不是未定义的。您在 app.Config 函数或问题中未显示的其他地方做了一些奇怪的事情。您显示的代码不会导致此错误,因为它没有实例化类 @AluanHaddad 这就是我如此困惑的原因。我唯一拥有的其他代码是另一个文件中的主控制器,与上面完全相同,除了不同的类名。而且效果很好。 @AluanHaddad 是的,我删除了用于测试的注射剂,因为由于this 错误,我们的路由类无法正常工作。 你需要使用一个函数。不是一堂课。 Angular 不会像使用服务注册那样使用注入器来实例化您的类,因为这不是它处理配置块的方式。 TypeScript 也没有建议您应该使用类,所以我不知道您为什么要这样编写代码。 说真的,看看 Anders Hejlsburg 在 typescript 上的演示,它可以在 Channel 9 上找到,只需谷歌它。网站上有一些关于课程的营销演讲,但那是因为在引入该语言时,es2015 尚未获得批准。 Es2015 类是 TypeScript 类的基础。更进一步,如果您认为 typescript 中的强类型需要使用类,您将编写糟糕的 typescript 代码。这将是绝对可怕和令人困惑的。在适当的地方使用类,例如它们对 Angular JS 控制器有意义。 【参考方案1】:

为什么这不起作用?

因为您使用的是app.config([MyClass]);,Angular 会在没有new 的情况下调用它,因此this 将是未定义的

修复

不要使用带有角度config 的类。使用函数。

更多

new:https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Operators/new

【讨论】:

以上是关于angular.js:Typescript 类构造函数“这是未定义的”的主要内容,如果未能解决你的问题,请参考以下文章

typescript Angular 4基本动画#angular #js

带有(ES6)类和继承的Angular.js DI

Sequelize Typescript Sequelize Typescript TypeError:没有'new'就不能调用类构造函数模型

TypeScript 类方法具有与构造函数相同的重载签名

如何使用具有构造函数参数的 TypeScript 类定义 AngularJS 工厂

TypeScript,面向对象,类、构造函数、继承、抽象类、接口和封装