扫码关注官方订阅号
私有变量我知道,静态是什么意思,为什么要用到静态私有变量?
人生最曼妙的风景,竟是内心的淡定与从容!
由于私有变量这个概念在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语言的概念都是一致的。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
由于私有变量这个概念在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的现状,再回答一下楼主,区别很简单,就是私有变量是每个实例都独立的,而静态私有变量是共用的,比如我们可以设计这么一个类(用的是草案上的语法)
可以看到这两个变量都已经被封装,外部无法访问,只能通过另外一个方法来代理访问,但是count变量是所有类实例共用的,这样我们可以统计出这个类到底创建了多少个实例。
这和其它OOP语言的概念都是一致的。