javascript - js中的私有变量和静态私有变量有什么区别?

查看:103
本文介绍了javascript - js中的私有变量和静态私有变量有什么区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

解决方案

由于私有变量这个概念在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语言的概念都是一致的。

这篇关于javascript - js中的私有变量和静态私有变量有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆