javascript - js中的私有变量和静态私有变量有什么区别?
黄舟
黄舟 2017-04-11 12:54:29
[JavaScript讨论组]

私有变量我知道,静态是什么意思,为什么要用到静态私有变量?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
天蓬老师

由于私有变量这个概念在JS里可能指的是函数内部局部变量,或者是文件级的未export变量,看了一下题目中的标签上有OOP,大概明白楼主问的是类似java和php那种类内部私有变量。

首先要纠正的是,楼主提到的这两个OOP名词:OOP下的私有变量和静态私有变量,在当前的JS下是没有的,虽然可以用原型链包装成类似的概念。

并且JS里的类,实际上和java、php这些OOP语言的类很不相同,它是一个原型链继承的实现。ES2015所加的class关键字也只是一个语法糖。

私有变量目前不在ES规范里,目前有一个提案ECMAScript Private Fields 还在stage1的阶段,不过可以参考一下。

静态变量也不在ES规范里,目前有一个提案Public Class Fields 已经处于stage2的阶段,有很大希望进入ES2017规范里,不过要注意它是public class fields的提案。


以上是JS的现状,再回答一下楼主,区别很简单,就是私有变量是每个实例都独立的,而静态私有变量是共用的,比如我们可以设计这么一个类(用的是草案上的语法)

class Test{
    #a;  // 私有变量
    static #count;  // 静态私有变量

    constructor(a = 0) {
        this.#a = +a;
        #count++;
    }

    get a() { return this.#a }
    set a(value) { this.#a = +value }
    
    static get count(){
       return #count;
    }
}

可以看到这两个变量都已经被封装,外部无法访问,只能通过另外一个方法来代理访问,但是count变量是所有类实例共用的,这样我们可以统计出这个类到底创建了多少个实例。

这和其它OOP语言的概念都是一致的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号