在类本身中初始化TypeScript变量与在构造函数中执行它之间的区别

时间:2017-05-05 11:46:34

标签: javascript typescript

class cls {
    str= 'hello';
}

VS

class cls {
    str: string;
    constructor() {
        this.str = 'hello';
    }
}

这两种形式有什么区别?

3 个答案:

答案 0 :(得分:1)

没有。这样:

class Foo {
    str = 'hello';
}

class Bar {
    str: string;
    constructor() {
        this.str = 'hello';
    }
}

将产生以下输出:

var Foo = (function () {
    function Foo() {
        this.str = 'hello';
    }
    return Foo;
}());
var Bar = (function () {
    function Bar() {
        this.str = 'hello';
    }
    return Bar;
}());

答案 1 :(得分:1)

这里没有具体的区别。但是如果你写下面的话:

class cls {
str: string;
constructor(string str) {
    this.str = str;
}

然后在类的初始化时,您可以将值赋给property。 例如:

var obj1= new cls("obj1");
var obj2= new cls("obj2");

第一种情况无法做到这一点。

答案 2 :(得分:-1)

当您选择在构造函数中初始化变量时,它为您提供了在创建对象时初始化这些值的额外好处,如下所示:

var obj1= new cls("obj1"); //Ability to change variable value
var obj2= new cls("obj2");

但是当你没有在构造函数中初始化值时,你必须首先创建对象,然后需要访问该变量来改变它的值,如下所示:

var obj1= new cls(); //Two step method to initialize one value
obj1.str = "New value";

因此,在构造函数中初始化变量总是更好和标准的方法,这是使用面向对象编程语言的好处。