免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1136 | 回复: 0
打印 上一主题 下一主题

私有属性和使用JavaScript的信息隐藏 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-17 13:57 |只看该作者 |倒序浏览
铁杆的面向对象设计支持者会注意到,当使用prototype方法向JavaScript
对象增加属性和函数时,所增加的属性和函数都是公用的,所有其他对象都能访问。对于函数来说,这通常没有问题,因为大多数函数都确实应当提供给外部客户。
但是对于属性,面向对象设计的支持者就会指出,公有属性违反了信息隐藏的概念,对象的属性应当是私有的,因此外部客户不能直接访问。外部客户只能通过公用
可用的函数来访问对象的私有属性。
    对于JavaScript,同样有可能创建外部客户不能访问的私有属性,而只能通过对象的(公用)方法来访问,但这一点很少有人知道。Douglas Crockford[3]提出了一种在JavaScript中创建私有属性的方法。这种方法非常简单,总结如下:
    私有属性可以在构造函数中使用var关键字定义。
    私有属性只能由特权函数(privileged function)公用访问。特权函数就是在构造函数中使用this关键字定义的函数。外部客户可以访问特权函数,而且特权函数可以访问对象的私有属性。
    下面来考虑前一个示例中的Vehicle类。假设你想让wheelCount和curbWeightIn- Pounds属性是私有的,并只能通过公用方法访问。新的Vehicle对象如代码清单5-4所示。
    代码清单5-4  重写后的Vehicle对象
    function Vehicle() {
        var wheelCount = 4;
        var curbWeightInPounds = 4000;
      
        this.getWheelCount = function() {
            return wheelCount;
        }
      
        this.setWheelCount = function(count) {
            wheelCount = count;
        }
      
        this.getCurbWeightInPounds = function() {
            return curbWeightInPounds;
        }
      
        this.setCurbWeightInPounds = function(weight) {
            curbWeightInPounds = weight;
        }
      
        this.refuel = function() {
            return "Refueling Vehicle with regular 87 octane gasoline";
        }
      
        this.mainTasks = function() {
            return "Driving to work, school, and the grocery store";
        }
    }
    注意,wheelCount和curbWeightInPounds属性都在构造函数中使用var关键字定义,这就使得这两个属性是私有属性。属性不再是公用的,如果想通过点记法访问wheelCount属性的值,如下:
    var numberOfWheels = vehicle.wheelCount;
    就会返回undefined,而不是wheelCount实际的值。
    由于属性现在是私有的,因此需要提供能访问这些属性的公用函数。getWheelCount、setWheelCount、
getCurbWeightInPounds和setCurbWeightInPounds函数就是作此使用的。现在Vehicle对象可以保证只能通过
公用函数访问私有属性,因此满足了信息隐藏的概念。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/98591/showart_1967055.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP