07 | 深入理解对象的私有和静态属性
- 深入了解
- 翻译
- 解释
- 总结
JavaScript中的对象构建和面向对象编程模式是开发中的重要主题。本文深入探讨了对象的私有和静态属性的创建方法。首先介绍了私有属性的概念和创建方式,包括使用最新规范中的#符号、闭包和IIFE、WeakMap以及Symbol等方法。这些方法为开发者提供了多种选择,以确保对象的私有属性不被外部访问。其次,文章详细讨论了静态属性的创建方式,强调了静态属性属于构造函数而非对象实例。通过示例代码和解释,读者可以清晰地了解如何在JavaScript中实现静态属性。整体而言,本文内容深入浅出,为读者提供了全面的对象属性管理知识。 在文章中,我们深入探讨了JavaScript中对象的私有和静态属性的创建方法。首先介绍了私有属性的概念和创建方式,包括使用最新规范中的#符号、闭包和IIFE、WeakMap以及Symbol等方法。这些方法为开发者提供了多种选择,以确保对象的私有属性不被外部访问。其次,文章详细讨论了静态属性的创建方式,强调了静态属性属于构造函数而非对象实例。通过示例代码和解释,读者可以清晰地了解如何在JavaScript中实现静态属性。整体而言,本文内容深入浅出,为读者提供了全面的对象属性管理知识。
《JavaScript 进阶实战课》,新⼈⾸单¥59
全部留言(6)
- 最新
- 精选
- 西红柿炒番茄weekmap、symbol实现静态属性,应该也是利用了闭包的特性吧?因为都是在创建的函数中保存了外部存储的数据
作者回复: 好问题,它们和闭包是不同的。闭包主要利用的是内层函数对外层函数内变量的访问。symbol主要是利用了唯一值的特点,实现私有属性。 而用weakmap,可以对属性存储,避免了用this对属性的获取。并且和map相比,它只能用对象作为键名,键值会随着对象销毁。这样可以避免不同对象用同一个map时之间相互的影响;以及对象销毁了后,map依然存在的问题。
2022-10-12归属地:北京51 - 鐘靜態公開屬性或方法的話可以這樣實現: class A{} A.a = 1 A.b = function(){} 私有的靜態方法不知道怎麼實現
作者回复: 可以参考MDN里介绍的“私有静态方法”:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Classes/Private_class_fields class ClassWithPrivateStaticMethod { static #privateStaticMethod() { return 42; } static publicStaticMethod1() { return ClassWithPrivateStaticMethod.#privateStaticMethod(); } static publicStaticMethod2() { return this.#privateStaticMethod(); } } console.log(ClassWithPrivateStaticMethod.publicStaticMethod1() === 42); // true console.log(ClassWithPrivateStaticMethod.publicStaticMethod2() === 42); // true
2022-10-04归属地:北京21 - 褚琛//闭包创建私有静态私有属性 var WidgetN; (function () { var appName = '天气应用'; WidgetN = function() {}; WidgetN.staticGetName = function() { return appName; } })() console.log(WidgetN.staticGetName()); console.log(WidgetN.appName); //Symbol创建静态私有属性 var WidgetP; { let staticPrivateProps = Symbol(); WidgetP = function() {}; WidgetP[staticPrivateProps] = { appName: '天气应用' }; WidgetP.staticGetName = function() { return WidgetP[staticPrivateProps].appName; } } console.log(WidgetP.staticGetName()); console.log(WidgetP.appName);2022-10-08归属地:海南2
- Nuvole Bianche原文:“在下面的例子中,我们首先声明了一个 WidgetG 变量。接下来,建立一个块级作用域,在这个作用域里,我们再声明一个 privateProps 的 WeakMap 变量。然后我们给 WidgetG 赋值一个函数声明,在里面给 WeakMap 的键名设置为 this,键值里面的 appName 为“天气应用”。下一步,我们基于 WidgetF 的 prototype 来创建一个 getName 方法,里面返回了 appName 的值。” 其中的WidgetG 在示例代码中用的是WidgetH吧2023-03-24归属地:上海
- Nuvole Bianche原文: 这时候,我们通过函数构造可以创建一个新的函数 widget6, 应该是新的对象widget6吧。2023-03-24归属地:上海
- 哎呦先生私有属性无法通过对象实例直接操作,需要对象暴露方法来操作具体属性。java中一般用get和set方法来进行私有属性的获取和操作属性。静态属性是属于类的属性,不是某个类的实例属性。例如你可以说人类有五千年的文明,但是不能说某个人有五千年的文明。文明这个属性,是属于人类而不是具体某个人。2022-11-04归属地:北京