今天在写JS代码的时候,发现
oDiv = document.getElementById("oDiv");
如此简单的一段代码在IE8中会出错,错误提示是对象不支持此属性或方法。看了半天没想明白为什么,而且在其他浏览器中正常.看错误提示位置,是oDiv这个变量有问题。将变量名改了,测试没有问题,将代码改成
var oDiv = document.getElementById("oDiv");
也没有问题。既然是对象不支持此方法,看来是oDiv被当成了一个对象。把这句删了,直接输出DOM对象的属性,在IE8下正常,而其他浏览器都不正常了。如此看来,IE8将所有具有ID属性的DOM元素都以ID为变量名创建成对象了,试验其他元素,都如此。那么,在IE8中就不再需要document.getElementById(“id”);这样的语法了,但是谁又会直接使用浏览器创建的对象呢?这样是简单了,浏览器兼容性谁敢不管呢?所以,为避免不必要的麻烦,还是乖乖使用
var oDiv = document.getElementById("oDiv");
这样的语法吧。变量还是声明为妙,虽然大多数情况下不是必须的。 变量使用var声明是一个好习惯,有时候这样声明也有特别的效果。 JavaScript书上都会说,JS的对象是没有私有成员变量的,一般都认为下划线开头的变量为私有。在一本Ajax的书上介绍,可以使用var声明变量来实现私有成员的特性。而以前提到的
javascript中定义类的方法使用this指针定义成员变量,是不能控制成员的访问权限的。例如,如下代码:
//私有成员的权限限制
function Obj(){
this.__color = "red";//这个是Obj类的“私有成员”,但是在外部可以正常访问
var __height=100;//这个是Obj函数(类)的局部变量,在Obj的闭包内可以访问,但是在外部不能访问
this.setHeight = function (h){
height = h;
}
this.getHeight = function(){
return height;
}
}
obj = new Obj();
alert(obj.__color);//在对象外正常访问
alert(obj.__height);//返回undefined
obj.setHeight(200);//公有的方法设置私有变量
alert(obj.getHeight());//返回200
这种方法虽然实现了私有成员的权限控制,但是却很少见到,不知道是什么原因。但是这种方法也有弊端,对于使用原型链定义的类的方法,则不能访问var声明的私有成员。对各种定义类的方法来说有什么问题我也没有想/实验过,这里仅仅是提供一种实现私有成员权限控制的方法.