Javascript类变量-这个。或变量

Javascript类变量-这个。或变量,javascript,Javascript,应该使用“this.”或“var”在Javascript类中创建变量,还是使用哪个变量无关紧要。很明显,这些都是用这个定义的。将从对象外部访问,而使用var定义的对象将不会访问,但是还有其他区别吗 函数myClass(){ 此值为0.count; this.oTimer=null; this.getCount=函数(){return(this.count);} } myObj=新的myClass(); myObj.getCount();//返回0试图在注释中比Dominique更详细地解释:

应该使用“this.”或“var”在Javascript类中创建变量,还是使用哪个变量无关紧要。很明显,这些都是用这个定义的。将从对象外部访问,而使用var定义的对象将不会访问,但是还有其他区别吗

函数myClass(){
此值为0.count;
this.oTimer=null;
this.getCount=函数(){return(this.count);}
}
myObj=新的myClass();

myObj.getCount();//返回0
试图在注释中比Dominique更详细地解释:

如果使用
var
关键字,则变量仅在其运行的范围内有效。这意味着在构造函数运行(函数体)之后,变量会丢失(因为它们只在构造函数内部有效)

如果要访问构造函数之外的变量(例如成员方法),必须通过
this
关键字将变量绑定到类本身。现在,它们的作用域是类本身,而不仅仅是构造函数


编辑:

进一步解释:虽然您可以在构造函数中声明的方法中使用使用
var
声明的变量,因为它们定义在相同的范围内(请参见问题示例),但无法通过通过通过
函数添加的任何其他添加的方法访问它们。prototype

为了展示这一点,我创建了一个


因此,通常更好的做法是使用
this
关键字定义一个类的所有变量(您不只是想在构造函数中用作临时变量)。

var
使计数隐藏。对于
this.count
,您可以通过执行
myobj.count
阅读有关javascript作用域和闭包的内容来访问count。词法作用域我的朋友:)这完全取决于您想要的可见性。使用“this”表示“它是该类的可见成员”。它还将该意图传达给其他开发人员。“var”的使用意味着“不得在外部使用”(同样,传达了这一意图)。但是,请注意,在JavaScript中,不管开发人员如何隐藏数据,最终通常都可以获取任何数据。模块模式等在捕获编译时冲突等方面走了很长一段路,但好的“ol”括号符号胜过任何东西。请看:感谢Suchit,该链接提供了一个很好的解释,但没有看到答案。Michael,刚刚测试了该理论,但似乎使用var声明的变量实际上对成员方法可见,就像那些用这个声明的。将编辑原始帖子中的示例以进行演示。@NickC yea但这只是因为您在同一范围(构造函数)中定义了该方法。看看这把小提琴,我尝试了添加成员方法的另一种方法(通过原型):。当您在函数体内部定义方法时,它可能会与vars一起工作,但对于构造函数外部使用的变量,使用
this
通常是更好的做法,感谢jsfiddle完全解释了差异,现在我明白了。我有一种不同的感觉,但无法理解这是什么。干杯,如果你想重复这一点作为回答,我可以将其标记为已接受的解决方案。@NickC当然。我只是在上面的原始答案中添加了这一点