Javascript 在构造函数中声明和在构造函数外部声明之间的区别
我用的是ES6和Angular2。在构造函数中声明这样的内容有什么区别:Javascript 在构造函数中声明和在构造函数外部声明之间的区别,javascript,angular,ecmascript-6,Javascript,Angular,Ecmascript 6,我用的是ES6和Angular2。在构造函数中声明这样的内容有什么区别: class Example{ constructor(private one: SomeClass, two: SomeClass){ this.two = two; } } class Example2{ private three:String = `What's the difference?` } var someClass1 = new SomeClass(); va
class Example{
constructor(private one: SomeClass, two: SomeClass){
this.two = two;
}
}
class Example2{
private three:String = `What's the difference?`
}
var someClass1 = new SomeClass();
var someClass2 = new SomeClass();
var myExample = new Example(someClass1, someClass2);
var myExample2 = new Example2();
就像这样:
class Example{
constructor(private one: SomeClass, two: SomeClass){
this.two = two;
}
}
class Example2{
private three:String = `What's the difference?`
}
var someClass1 = new SomeClass();
var someClass2 = new SomeClass();
var myExample = new Example(someClass1, someClass2);
var myExample2 = new Example2();
到目前为止,我理解如果我导入一个类,那么我必须通过构造函数声明它。这里的
one
、two
和two
之间有什么区别?构造函数中的代码将在创建对象实例时执行。类中的代码,但构造函数外的代码成为类使用的类字段/成员,或在创建实例后可以调用的类字段/成员
在你的例子中one
和two
是在实例化类时应传递给构造函数的参数的名称。这些值必须传递给构造函数
另一方面,three
是一个类“字段”。它由类创建,并在类的生存期内私自使用。它没有被传给班级
因此,举个例子来说:
class Example{
constructor(private one: SomeClass, two: SomeClass){
this.two = two;
}
}
您可以这样实例化它:
class Example{
constructor(private one: SomeClass, two: SomeClass){
this.two = two;
}
}
class Example2{
private three:String = `What's the difference?`
}
var someClass1 = new SomeClass();
var someClass2 = new SomeClass();
var myExample = new Example(someClass1, someClass2);
var myExample2 = new Example2();
但在这种情况下:
class Example2{
private three:String = `What's the difference?`
}
您只需实例化如下所示:
class Example{
constructor(private one: SomeClass, two: SomeClass){
this.two = two;
}
}
class Example2{
private three:String = `What's the difference?`
}
var someClass1 = new SomeClass();
var someClass2 = new SomeClass();
var myExample = new Example(someClass1, someClass2);
var myExample2 = new Example2();
构造函数中的代码将在创建对象实例时执行。类中的代码,但构造函数外的代码成为类使用的类字段/成员,或在创建实例后可以调用的类字段/成员 在你的例子中
one
和two
是在实例化类时应传递给构造函数的参数的名称。这些值必须传递给构造函数
另一方面,three
是一个类“字段”。它由类创建,并在类的生存期内私自使用。它没有被传给班级
因此,举个例子来说:
class Example{
constructor(private one: SomeClass, two: SomeClass){
this.two = two;
}
}
您可以这样实例化它:
class Example{
constructor(private one: SomeClass, two: SomeClass){
this.two = two;
}
}
class Example2{
private three:String = `What's the difference?`
}
var someClass1 = new SomeClass();
var someClass2 = new SomeClass();
var myExample = new Example(someClass1, someClass2);
var myExample2 = new Example2();
但在这种情况下:
class Example2{
private three:String = `What's the difference?`
}
您只需实例化如下所示:
class Example{
constructor(private one: SomeClass, two: SomeClass){
this.two = two;
}
}
class Example2{
private three:String = `What's the difference?`
}
var someClass1 = new SomeClass();
var someClass2 = new SomeClass();
var myExample = new Example(someClass1, someClass2);
var myExample2 = new Example2();
是的缩写语法
class Example{
private one: SomeClass;
constructor(one: SomeClass, two: SomeClass){
this.one = one;
this.two = two;
}
}
因此,如果在构造函数参数之前有private
、protected
或public
,则会立即通过传递给构造函数的值声明和初始化类字段
是的缩写语法
class Example{
private one: SomeClass;
constructor(one: SomeClass, two: SomeClass){
this.one = one;
this.two = two;
}
}
因此,如果在构造函数参数之前有
private
、protected
或public
,则会立即通过传递给构造函数的值声明和初始化一个类字段。one
会自动声明,因为它具有private
修饰符<代码>两个不会被声明,因为它没有这样的修饰符。如果this.two=two代码>将导致错误,具体取决于编译器配置。one
自动声明,因为它具有private
修饰符<代码>两个
不会被声明,因为它没有这样的修饰符。如果this.two=two代码>将导致错误,具体取决于编译器配置。myExample
是否与ES5中构造函数的工作方式相同?@userqwert是。你只需要在ES6和TypeScript中添加一些语法糖就可以了。myExample
与ES5中构造函数的工作原理相同吗?@userqwert是的。您只需要在ES6和TypeScript中添加一些语法糖。