IE8,不再需要getElementById?

今天在写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声明的私有成员。对各种定义类的方法来说有什么问题我也没有想/实验过,这里仅仅是提供一种实现私有成员权限控制的方法.
posted @ 2010-12-24 17:44  leetom  阅读(2604)  评论(0编辑  收藏  举报