我们知道: var可以定义一个局部变量,当然如果var定义在最外层的话,就是全局的局部变量,也就算是全局变量了。 而this关键字定义的变量准确的说应该算是成员变量。即定义的是调用对象的成员变量。 另外在“类(构造函数)”中,我们通常也会用var定义私有属性,而this定义公共属性。 以上这些是大家都知道的,若不知道看了就大概知道的。但我今天遇到了一个疑惑,恳请社区高手指点。是这样的:
//打开浏览器控制台执行一下命令
//定义了一个全局变量
var wahaha = “娃哈哈”;//这里双引号改成英文双引号
//输出“娃哈哈”
console.log(wahaha);
//输出“娃哈哈”,我们知道这里的this指向的是window,即之前的var定义已经把wahaha变量定义成了window的成员变量
console.log(this.wahaha);
上面代码两条控制台日志语句都输出了“娃哈哈”的结果,然而如果这样
//定义一个类
function ClassA(){
//定义一个私有属性
var wahaha = “娃哈哈”;//这里双引号改成英文双引号
//输出“娃哈哈”;
console.log(wahaha);
//输出undefined
console.log(this.wahaha);
}
var a = new ClassA();
这里的输出结果就不同了 ,console.log(wahaha)顺利输出“玩哈哈”,而console.log(this.wahaha);就输出了“undefined”。其实我是觉得这个示例跟之前的那个示例的效果是有矛盾的地方的。我明白很多人利用这个特性实现私有变量跟公共变量的效果,但真的不得不说这是很矛盾的并且令人费解的。
矛盾点在于:第一个例子,var定义的全局变量会很顺利的成为window的成员变量,直接用“变量名”或者“this.变量名”都能得到结果,而第二个例子中,在构造函数中用var定义变量的话,该变量却只能在内部直接通过“变量名”获得而无法通过“this.变量名”的方式获得。
不知道我的问题描述的够不够清楚,这是今天琢磨《javascript精粹》时候想不通的一个问题。恳请高手指点