Javascript类变量 - 这个。或变种

时间:2017-01-23 17:59:26

标签: javascript

应该'这个。'或者' var'用于在Javascript类中创建变量,或者使用哪个变量无关紧要。显然是那些用这个定义的。可以从对象外部访问,而用var定义的那些不会,但是还有其他差异吗?



function myClass() {
	this.count = 0;
	this.oTimer = null;
    this.getCount = function() { return(this.count); }
}
oMyObj = new myClass();
oMyObj.getCount();  // returns 0




而不是



function myClass2() {
	var count = 0;
	var oTimer = null;
    this.getCount = function() { return(count); }
}
oMyObj = new myClass2();
oMyObj.getCount();  // returns 0




1 个答案:

答案 0 :(得分:2)

在评论中试图比Dominique更详细地解释一下:

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

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

编辑:

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

为了表明这一点,我创建了一个小JSFiddle example

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