如何在JavaScript中实现私有属性的写类方式(一)

 更新时间:2013年12月04日 08:51:42   作者:  
这篇文章主要介绍了如何在JavaScript中实现私有属性的写类方式。需要的朋友可以过来参考下,希望对大家有所帮助

之前讨论过JavaScript中的写类方式。但没有讨论私有的实现。这篇看下。

我们知道JS中私有属性的实现本质就是 var + closure。如下

复制代码 代码如下:

function Person(n, a){
    // public
    this.name = n;
    // private
    var age = a;
    this.getName = function(){
        return this.name;
    }
    this.getAge = function(){
        return age;
    }
}

测试如下,age是私有的,使用点操作符无法获取到,而只能使用getName方法。
复制代码 代码如下:

var p = new Person('jack',23);
console.log(p.age);  // undefined
console.log(p.getAge()); // 23

以上没什么稀奇的,下面我们使用一个工具函数来实现。 
复制代码 代码如下:

/**
 * @param {String} className
 * @param {Function} classImp
 */
function $class(className, classImp){
    function clazz(){
        if(typeof this.init == "function"){
            this.init.apply(this, arguments);
        }
    }
    classImp.call(clazz.prototype);
    window[className] = clazz;
}

写一个类
复制代码 代码如下:

$class('Person', function(){
    // 私有属性都定义在这
    var age = '';
    this.init = function(n, a){
        // 共有属性挂在this上,初始化
        this.name = n;
        // 私有属性初始化
        age = a;
    };
    this.getName = function(){
        return this.name;
    };
    this.getAge = function(){
        return age;
    }
});

new一个实例对象
复制代码 代码如下:

var p = new Person('jack',23);
console.log(p.name); // jack 共有的可使用点操作符获取
console.log(p.age); // undefined 私有的不能通过点操作符获取
console.log(p.getAge()); // 23 私有的age只能通过共有的方法getAge获取

相关文章

  • 微信上传视频文件提示(推荐)

    微信上传视频文件提示(推荐)

    晚上要下班了老板发来一个任务:把一个300M左右的视频压缩到100M以内,以便在微信上发送。于是就是抽空搞了起来,下面小编把过程分享到脚本之家平台,需要的朋友参考下吧
    2018-11-11
  • 微信小程序自定义顶部导航组件

    微信小程序自定义顶部导航组件

    这篇文章主要为大家详细介绍了微信小程序自定义顶部导航组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 微信小程序和公众号实现签到页面

    微信小程序和公众号实现签到页面

    这篇文章主要为大家详细介绍了微信小程序和公众号实现签到页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 原生js实现下拉选项卡

    原生js实现下拉选项卡

    这篇文章主要为大家详细介绍了原生js实现下拉选项卡,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • 微信头像地址失效踩坑记附带解决方案

    微信头像地址失效踩坑记附带解决方案

    这篇文章主要介绍了微信头像地址失效踩坑记附带解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • JavaScript实现echarts水球图百分比展示大屏可视化

    JavaScript实现echarts水球图百分比展示大屏可视化

    这篇文章主要为大家介绍了JavaScript实现echarts水球图百分比展示大屏可视化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • js 动态创建 html元素

    js 动态创建 html元素

    最近在学习js 写了个简单的效果,菜鸟可以学习学习,基本原理:使用随即数设置top 和left的值,
    2009-07-07
  • 使用Curl命令查看请求响应时间方法

    使用Curl命令查看请求响应时间方法

    curl命令查看请求响应时间的方法非常简单,今天小编抽空给大家介绍下使用Curl命令查看请求响应时间方法,感兴趣的朋友一起看看吧
    2016-11-11
  • JavaScript实现节点的删除与序号重建实例

    JavaScript实现节点的删除与序号重建实例

    这篇文章主要介绍了JavaScript实现节点的删除与序号重建方法,涉及javascript针对页面节点的删除与遍历技巧,非常具有实用价值,需要的朋友可以参考下
    2015-08-08
  • mpvue微信小程序多列选择器用法之省份城市选择的实现

    mpvue微信小程序多列选择器用法之省份城市选择的实现

    这篇文章主要给大家介绍了关于mpvue微信小程序多列选择器用法之省份城市选择实现的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03

最新评论