前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Javascript设计模式学习(一)封装和信息隐藏

Javascript设计模式学习(一)封装和信息隐藏

作者头像
大江小浪
发布2018-07-24 11:01:21
2830
发布2018-07-24 11:01:21
举报
文章被收录于专栏:小狼的世界小狼的世界

在我们编程的过程中,我们应该尽可能的把数据和函数处理信息隐藏在对象内部,在Javascript中,我们怎样来做呢?

虽然Javascript中没有其他面向对象语言的声明共有和私有的关键字,但是我们仍可以通过一些手段来达到这样的效果。我们可以这样理解封装和信息隐藏,信息隐藏是我们的目标,因为我们不想太多无关的信息暴露在对象之外,而封装就是实现我们目标的方法。封装就可以被定义为在对象内部隐藏数据表达和具体实现的细节。

下面来学习下怎么用Javascript来实现接口:

第一种是:Fully Exposed Method

 看例子

代码语言:javascript
复制
var HouseItem = function(hid,hname,address){
    if(hid == undefined) throw new Error('Hid is not defined!')
                
    this.hid = hid;
    this.hname = hname || "暂无";
    this.address = address || "暂无";
}

HouseItem.prototype.display = function(container){
    document.getElementById(container).innerHTML = "楼盘名称:" + this.hname + "<br />";
}

 这个中,我们讲一个楼房的项目封装到了一类中,只是我们对于他的属性的有效性检查还不是很完整,而且此时属性的获取或者赋予完全是公开的。

 我们可以继续将这个例子完善为

代码语言:javascript
复制
var HouseItem = function(hid,hname,address){
    this.setHid(hid);
    this.setHname(hname);
    this.setAddress(address);
}

   HouseItem.prototype = {
    getHid: function(){
        return this.hid;
    },
    setHid: function(hid){
        if (!this.isValid(hid)) 
        throw new Error('Hid is not defined!');
        this.hid = hid;
    },
    getHname: function(){
        return this.hname;
    },
    setHname: function(hname){
        this.hname = hname || "暂无";
    },
    getAddress: function(){
        return this.address;
    },
    setAddress: function(address){
        this.address = address || "暂无";
    },
    isValid: function(hid){
        if (hid != null && hid != undefined && hid != "") {
        return true;
        }
        else {
        return false;
        }
    },
    showHouse: function(){
        document.getElementById("container").innerHTML += "楼盘名称:" + this.hname + "<br />";
    }
    }

怎么样,现在是不是看起来完善很多了,但这还不是最好的方法,不过这种方法很容易理解,也比较容易上手。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2008-09-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档