首页 > 编程语言 >[Javascript] About private access (Object.getOwnPropertySymbols)

[Javascript] About private access (Object.getOwnPropertySymbols)

时间:2024-11-25 21:25:09浏览次数:8  
标签:About Javascript const log Object module value key console

We have a module:

const key = Symbol('key')

export class A {

    [key] = 1

    value () {
        console.log(this[key])
    }
}

It seems that keyis not expose to outside of module, but still we are able to get it.

import {A} from './module.js'

const a = new A()
const keys = Object.getOwnPropertySymbols(a)
console.log(keys) //[Sybmol(key)]
const key = keys[0]
console.log(a[key])

 

And we know that since ES2022 we have true private field in class:

// module.ts

export class A {
    #key = 1
    value () {
        console.log(this.#key)
    }
}

This should work, but it has browser compabilities issue.

 

What we can do is using a WeakMapto stroe all the private field & value, refer to current instance

const privateField = new WeakMap()

export class B {
    constructor() {
        privateField.set(this, {key: 'value'})
    }

    key () {
        console.log(privateField.get(this).key)
        return privateField.get(this).key
    }
}
import { B } from './module.js'

const b = new B()
console.log(b.key()) //value

 

标签:About,Javascript,const,log,Object,module,value,key,console
From: https://www.cnblogs.com/Answer1215/p/18568756

相关文章

  • [Javascript] Encapsulate chunk operation
    functionmain(){constdatas=newArray(10000).fill(null).map((_,i)=>i)functiontaskHanlder(_,i){console.log(i)}performChunkNode(datas,taskHanlder)}main()functionperformChunk(datas,task,scheduler){if......
  • 第十章JavaScript的应用
    10.1JavaScript概述10.1.1JavaScript简介JavaScript是一种基于对象(0bject)和事件驱动(EventDriven)并具有安全性能的脚本语言,能够与HTML(超文本标记语言)、Java语言一起在Web页面中与Web客户交互它无须经过先将数据传给服务器端(Server)、再传回来的过程,而直接可以......
  • JavaScript中数组知识点
    数组数组这种数据类型可以在一个变量里保存多个值,每个值都有一个数值索引,而且能够保存任何数据类型(比如布尔值、数值、字符串、函数、对象),甚至能够保存其他数组。我们可以通过引用数组的数字索引来访问任何的项,这个索引和项在数组中的位置是对应的。通常,我们把数组中的项称......
  • 盘点2个.Net版本的JavaScript执行引擎
    https://zhuanlan.zhihu.com/p/692270642 推荐2个JavaScript开源引擎,方便在C#执行JavaScript脚本。1、jurassicJurassic是一个开源的托管JavaScript执行引擎,使用MS-PL授权协议。它的目标是成为.NET平台上功能最强,最为标准的JavaScript引擎。功能强大:支持ECMAScript3和ECMAS......
  • JavaScript核心语法(3)
    前两篇文章大概把JavaScript的基础语法讲了一下,这篇文章主要讲讲ES6的核心语法。ES6的核心语法说实话其实有点多,我重点挑一些经常在项目中用到的来讲,其他一些我没怎么见过的就不讲了。目录1.变量和常量变量(let 和 var)varlet常量(const)总结2.箭头函数语法示例特性和......
  • [Javascript] Import the Same JavaScript Module Multiple Times with Cache Busting
    WhenattemptingtoloadthesamemoduletwiceinJavaScriptyou'llhitacacheandcodewon'tre-run.Inscenarioswhereyouactuallydowanttohavestateinyourmodules,you'llhavetouseacache-bustingtechniquebypassingaquerypar......
  • javascript-语句
    1.对象时不可迭代访问的。尝试使用for/of循环会throwTypeErrorleto={x:1,y:2,z:3};for(letelementofo){console.log(element);}//throwtypeError2.可以使用Object.keys()方法实现对象迭代leto={x:1,y:2,z:3};letkeys="";for(letkofObject.keys(o)){keys+=k;}......
  • JavaScript有几种类型值?能否画出它们的内存图?
    JavaScript有七种原始数据类型和一种引用类型:原始数据类型(PrimitiveDataTypes):存储在栈(Stack)内存中,值直接存储在变量访问的位置。Boolean:true或falseNull:只有一个值null,表示空或不存在的值。Undefined:变量声明了但未赋值时的默认值undefined。Number:所......
  • 【分享】这篇教程助力你成为 JavaScript 糕手!(十一)
    第十一章:异步编程11.1异步编程的概念在JavaScript中,异步编程是一种非常重要的编程模式,它用于处理那些不会立即完成的操作,而是在一段时间后才会返回结果的任务。传统的同步编程模式下,代码是按照从上到下的顺序依次执行的,每一行代码都必须等待前一行代码执行完毕后才会......
  • 前端必知必会-JavaScript 按位运算
    文章目录JavaScript按位运算JavaScript使用32位按位操作数JavaScript按位与JavaScript按位或JavaScript按位异或JavaScript按位与(&)JavaScript按位或(|)JavaScript按位异或(^)JavaScript按位非(~)JavaScript(零填充)按位左移(<<)JavaScript(零填充)右移......