JavaScript,class类如何通过关键字#定义私有属性?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
JavaScript
的高级语法的发展总是落后其它的高级编程语言,比如:javascript
中的类的写法就曾经是个很大的难题。直到es6
标准的出现,这种情况才得到好转。本文将讲述目前的浏览器及node
都支持的class
中的私有属性的写法。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验感悟。本文测试环境:win10
,chrome@116.0.5845.141
,node@16.14.2
。本文涉及的是:JavaScript
中class
中的私有属性的写法。
传统的私有属性写法"_prop"
以前的时候,大家都是在属性名称前加一个下划线“_”,表示这个属性是个非公有的属性。但这是个掩耳盗铃的写法,其本质上还是个大家都可以访问的属性。
var su = {
name: "对象普通键",
_name: "对象假私有键",
};
class nan {
name = "类普通属性";
_name = "类虚假私有属性";
}
nan = new nan();
console.log(su.name, su["name"], su._name, su["_name"]);
console.log(nan.name, nan["name"], nan._name, nan["_name"]);
输出:
对象普通键 对象普通键 对象假私有键 对象假私有键
类普通属性 类普通属性 类虚假私有属性 类虚假私有属性
es6
最新标准私有属性写法"#prop"
普通的object
对象,是不可以定义以#
开头的键的。所以,这种情况放弃讨论。
var su = {
_name: "对象假私有键",
// #name:"对象真私有键", // Uncaught SyntaxError: Unexpected identifier '#name'
};
js
中的类class
可以定义#
开头的私有属性。测试代码:
class nan {
#name = "类真实私有属性";
}
nan = new nan();
console.log(nan["#name"]); // undefined
// console.log(nan.#name); // Uncaught SyntaxError: Private field '#name' must be declared in an enclosing class
对于私有属性来说:
["#prop"]
的写法,拿到的值是undefined
。.#prop
的写法,直接报错Private field '#name' must be declared in an enclosing class
。
在typescript
里面,class
是有private
关键字的。这个后续文章待续。
类内部可以公开私有属性
在类的内部,是可以通过this.#prop
读取到私有属性的。如果在这种读取私有属性的办法,包装在一个getter
里面的话,就和一个可变成的普通属性没有啥区别了。测试代码:
class nan {
#name = "类真实私有属性";
get name() {
console.log("只有类自身内部的方法能访问");
return this.#name;
}
}
nan = new nan();
console.log(nan["name"],nan.name); // 类真实私有属性 类真实私有属性
输出:
只有类自身内部的方法能访问
只有类自身内部的方法能访问
类真实私有属性 类真实私有属性
相关文章
结束语
更多nodejs
的经验文章,可以参考苏南大叔的经验文章:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。