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声明的私有成员。对各种定义类的方法来说有什么问题我也没有想/实验过,这里仅仅是提供一种实现私有成员权限控制的方法.

转载于:https://www.cnblogs.com/leetom/archive/2010/12/24/2845917.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值