Javascript ES2015:从构造函数调用方法
我需要在创建ES2015类的新实例时将DOM元素添加到某个容器中。看起来不可能从构造函数调用该方法Javascript ES2015:从构造函数调用方法,javascript,ecmascript-6,Javascript,Ecmascript 6,我需要在创建ES2015类的新实例时将DOM元素添加到某个容器中。看起来不可能从构造函数调用该方法 让titleCounter=0; 类标题{ 构造函数(){ 滴定计数器++; this.id='title'+titleCounter; this.html=` 标题 `; //addDOMtoField();//不工作 $('#container').append(this.html); } addDOMtoField(){ $('#container').append(this.htm
让titleCounter=0;
类标题{
构造函数(){
滴定计数器++;
this.id='title'+titleCounter;
this.html=`
标题
`;
//addDOMtoField();//不工作
$('#container').append(this.html);
}
addDOMtoField(){
$('#container').append(this.html);
}
}
让instance1=新标题()代码>
#容器{
最小高度:5px;
背景颜色:绿色;
填充物:5px;
颜色:白色;
}
在JavaScript中,类字段和方法名在构造函数和其他方法中不能作为变量名绑定使用;它们只能通过引用实例来访问,引用可以通过this
获得
因此,您必须使用this.addDOMtoField()
而不是JavaScript中的addDOMtoField()
,类字段和方法名称在构造函数和其他方法中不能作为变量名绑定使用;它们只能通过引用实例来访问,引用可以通过this
获得
因此,您必须使用this.addDOMtoField()
,而不仅仅是addDOMtoField()
当被问到这个问题时,我为什么会犯这个错误
因为ECMAScript 2015之前的Java经验。在Java中,如果类方法/字段XXX
存在且未声明局部变量XXX
,则可以在this.XXX
中省略this
4年过去了。。。
现在我是OOP和打字脚本专家
从构造函数(和其他非静态方法)调用非静态方法
它的意思是“调用将要创建的自己实例的方法”。在构造函数和非静态methodd中,这个
关键字直接引用当前类的实例。因此,调用addDOMtoField
方法是this.addDOMtoField
JustaddDOMtoField
表示调用局部变量。因为没有声明和初始化这样的变量,addDOMtoField
是未定义的
。JavaScript不会对它大喊大叫,但TypeScript会,而且它是对的,因为引用尚未初始化且从未声明过的变量是毫无意义的
因为构造函数的角色是类字段的初始化,所以我们需要了解从构造函数调用方法时所做的事情。在OOP中,构造函数基本上不能引起任何副作用
从构造函数(和其他任何方法)调用非静态方法
静态方法是所有实例的通用方法。它与类关联,而不是与特定实例关联。这就是为什么许多其他语言不能原谅这个.staticMethodName()
,但是JavaScript会原谅它,并且会混淆它。建议禁止ESLint进行此类调用
因此,静态方法调用的正确方法是从类调用,而不是从实例调用:ClassName.staticMethodName()
当被问到这个问题时,我为什么会犯这个错误
因为ECMAScript 2015之前的Java经验。在Java中,如果类方法/字段XXX
存在且未声明局部变量XXX
,则可以在this.XXX
中省略this
4年过去了。。。
现在我是OOP和打字脚本专家
从构造函数(和其他非静态方法)调用非静态方法
它的意思是“调用将要创建的自己实例的方法”。在构造函数和非静态methodd中,这个
关键字直接引用当前类的实例。因此,调用addDOMtoField
方法是this.addDOMtoField
JustaddDOMtoField
表示调用局部变量。因为没有声明和初始化这样的变量,addDOMtoField
是未定义的
。JavaScript不会对它大喊大叫,但TypeScript会,而且它是对的,因为引用尚未初始化且从未声明过的变量是毫无意义的
因为构造函数的角色是类字段的初始化,所以我们需要了解从构造函数调用方法时所做的事情。在OOP中,构造函数基本上不能引起任何副作用
从构造函数(和其他任何方法)调用非静态方法
静态方法是所有实例的通用方法。它与类关联,而不是与特定实例关联。这就是为什么许多其他语言不能原谅这个.staticMethodName()
,但是JavaScript会原谅它,并且会混淆它。建议禁止ESLint进行此类调用
因此,静态方法调用的正确方法是从类调用,而不是从实例调用:ClassName.staticMethodName()
谢谢您的回答!我在你的回答中加了一些解释性的文字@TakesiTokugawaYD你可以(也应该)接受你用旁边的灰色勾号找到的最好答案。谢谢你的答案!我在你的回答中加了一些解释性的文字@TakesiTokugawaYD你可以(也应该)接受你用旁边的灰色勾号找到的最好答案。不起作用
-如果你在开发者工具控制台中查看,你会看到一个错误不起作用
-如果你在开发者工具控制台中查看,你会看到一个错误