Discussion
Loading...

Post

  • About
  • Code of conduct
  • Privacy
  • Users
  • Instances
  • About Bonfire
Lea Verou, PhD
@leaverou@front-end.social  ·  activity timestamp 3 days ago

The #JS utility you never knew you needed 😂
Create multiple Symbols in one go with this Proxy-based one liner.

“But aren’t proxies super slow?”

Nah. Depending on the browser it ranges from 50% slower to exactly the same.
Which unless you’re creating millions of symbols, is inconsequential.

https://jsbenchmark.com/#eyJjYXNlcyI6W3siaWQiOiJjRFFDY3RhZ05mTmgwY1YtSTZzSnYiLCJjb2RlIjoibGV0IHthLCBiLCBjfSA9IERBVEEiLCJuYW1lIjoiVmlhIFByb3h5IiwiZGVwZW5kZW5jaWVzIjpbXX0seyJpZCI6ImYzTEhGLW04V05KS3BId1ZjaEpWcCIsImNvZGUiOiJsZXQgYSA9IFN5bWJvbChcImFcIik7XG5sZXQgYiA9IFN5bWJvbChcImJcIik7XG5sZXQgYyA9IFN5bWJvbChcImNcIik7IiwibmFtZSI6IlJlZ3VsYXIgU3ltYm9sIGNyZWF0aW9uIiwiZGVwZW5kZW5jaWVzIjpbXX1dLCJjb25maWciOnsibmFtZSI6IkJhc2ljIGV4YW1wbGUiLCJwYXJhbGxlbCI6dHJ1ZSwiZ2xvYmFsVGVzdENvbmZpZyI6eyJkZXBlbmRlbmNpZXMiOltdfSwiZGF0YUNvZGUiOiJjb25zdCBjcmVhdGVTeW1ib2xzID0gbmV3IFByb3h5KHt9LCB7XG5cdGdldCAodGFyZ2V0LCBwcm9wKSB7XG5cdFx0cmV0dXJuIFN5bWJvbChwcm9wKTtcblx0fSxcbn0pO1xucmV0dXJuIGNyZWF0ZVN5bWJvbHMifX0

// util.js
export const createSymbols = new Proxy({}, {
	get (target, prop) {
		return Symbol(prop);
	},
});

// Use like:
const {a, b, c} = createSymbols;
console.log(a, b, c) 
// Symbol("a"), Symbol("b"), Symbol("c")
// util.js export const createSymbols = new Proxy({}, { get (target, prop) { return Symbol(prop); }, }); // Use like: const {a, b, c} = createSymbols; console.log(a, b, c) // Symbol("a"), Symbol("b"), Symbol("c")
// util.js export const createSymbols = new Proxy({}, { get (target, prop) { return Symbol(prop); }, }); // Use like: const {a, b, c} = createSymbols; console.log(a, b, c) // Symbol("a"), Symbol("b"), Symbol("c")
  • Copy link
  • Flag this post
  • Block
ziadkh0
@ziadkh0@fosstodon.org replied  ·  activity timestamp 3 days ago

@leaverou Yep, I first saw this awesome pattern on @rauschma's blog 😄
https://2ality.com/2018/08/enums-via-proxies.html#symbols-as-values-for-the-constants

Setting up constants via proxies

In this blog post, a describe a little hack for quickly setting up constants (think enum values, but not wrapped inside a namespace). It is more an educational puzzle than something you should actually use in your code.
  • Copy link
  • Flag this comment
  • Block
Log in

bonfire.cafe

A space for Bonfire maintainers and contributors to communicate

bonfire.cafe: About · Code of conduct · Privacy · Users · Instances
Bonfire social · 1.0.0-rc.3.21 no JS en
Automatic federation enabled
  • Explore
  • About
  • Members
  • Code of Conduct
Home
Login