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

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

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

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

第一种是:Fully Exposed Method

 看例子

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 />";
}

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

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

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 />";
    }
    }

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

ASP.NET Core的配置(3): 将配置绑定为对象[上篇]

出于编程上的便利,我们通常不会直接利用ConfigurationBuilder创建的Configuration对象读取某个单一配置项的值,而是倾向于将一组相关的...

2106
来自专栏前端说吧

【本周面试题】第2周 - 看上去和实际上的代码执行顺序

隐形考点,while小括号内部,会进行隐式转换,将其他类型的值转为Boolean布尔值类型的进行判断

882
来自专栏企鹅号快讯

python案例-爬取大学排名

一个好玩的爬虫 明天就要考试了,就是不想复习,就想去写代码,学习编程!2018,第一炮。 ? 技术路线:request-bs4 程序结构: 1.从网上获取大学排...

2595
来自专栏跟着阿笨一起玩NET

C# Eval在aspx页面中的用法及作用

2512
来自专栏SeanCheney的专栏

《利用Python进行数据分析·第2版》第6章 数据加载、存储与文件格式6.1 读写文本格式的数据6.2 二进制数据格式6.3 Web APIs交互6.4 数据库交互6.5 总结

访问数据是使用本书所介绍的这些工具的第一步。我会着重介绍pandas的数据输入与输出,虽然别的库中也有不少以此为目的的工具。 输入输出通常可以划分为几个大类:读...

5686
来自专栏软件开发

JavaSE学习总结(二)——Java语言基础

一、Java程序预览 Java的语法与C非常类似,这里先使用几个非常简单的程序以点带面来区分C语Java的区分再细讲每个知识点。该文仅针对有编程基础的朋友参考。...

2408
来自专栏一枝花算不算浪漫

[Java拾遗一] XML的书写规范与解析.

47620
来自专栏逸鹏说道

C# 温故而知新:Stream篇(五)下

对于重写的方法这里不再重复说明,大家可以参考我写的第一篇 以下是memoryStream独有的方法 virtual byte[] GetBuffer() 这个方...

36210
来自专栏岑玉海

hbase源码系列(九)StoreFile存储格式

从这一章开始要讲Region Server这块的了,但是在讲Region Server这块之前得讲一下StoreFile,否则后面的不好讲下去,这块是基础,Re...

3925
来自专栏TechBox

一份走心的iOS开发规范前言约定(一)命名规范(二)编码规范2.14 内存管理规范本文参考文章其他有价值的文章

5628

扫码关注云+社区

领取腾讯云代金券