My thought was Symbol.typeof could improve both reliability and flexibility. It 
could be abused, but no more than Symbol.toStringTag. My use case is putting 
classes into “namespaces”. With [Symbol.typeof] = 
“Collections.Lists.LinkedList”, I can get the qualified type of the object. I 
can also use this in my IDE to keep my classes organized if I write tools to 
help me. Since imports use paths, if I move a file refactoring can be painful. 
With an IDE extension, I can trigger an event when I move a file to prompt 
“Update all imports?”. It can parse my project and update all imports to point 
to the right place.

From: es-discuss <[email protected]> On Behalf Of Jordan Harband
Sent: Tuesday, January 15, 2019 3:36 PM
To: J Decker <[email protected]>
Cc: [email protected]
Subject: Re: Proposal: Symbol Linked to `typeof`

`.constructor` is unreliable, and can be easily forged - of course, 
`Symbol.typeof` would create the same unreliability with one of the few truly 
reliable operators in the language.

On Tue, Jan 15, 2019 at 12:38 PM J Decker 
<[email protected]<mailto:[email protected]>> wrote:


On Sat, Jan 12, 2019 at 8:19 AM Randy Buchholz 
<[email protected]<mailto:[email protected]>> wrote:
(Hi all, new to group)

Some of the Well Known Symbols are linked to standard functions –  
Symbol.toStringTag - A string value used for the default description of an 
object. Used by Object.prototype.toString().

When I have a Class instance (say, `const flow = new Flow()`, the debugger 
shows `flow = Flow {`.
But when I do `console.log( typeof flow)` the output is `object`.

I assume changing basic behavior `typeof` would be breaking, but extending it 
through a symbol would be useful.

`Symbol.typeofTag` of just `Symbol.typeof`

Invoking `typeof` on an object with this symbol would return “user-typed” 
information.


can't you just use the constructor name when needing more detail?

var a = new Date();
a.constructor.name<http://a.constructor.name>
"Date"


(Posting Question)
What is the preferred format/approach for highlighting code in posts?
____________________
Possible Approaches
```
class Flow {
    get [Symbol.typeof]() { return Flow; }  or { return “Flow” }
}
```
would work much like Symbol.species.  Implicitly casting to string would be 
more intuitive I think.

Other approaches, (special handling of well-knowns) could be:

Decorator-ish
```
[Symbol.typeof] = “Flow”
Class Flow {…
```
or inferred

```
[Symbol.typeof]
class Flow {…
```

Internal – In class, but not in a function.

```
Class Flow {
[Symbol.typeof]
or
[Symbol.typeof] = “Flow”
or
[Symbol.typeof] = Flow
or
[Symbol.typeof] = this

```

Constructor
```
Class Flow {
   Constructor() {
      this[Symbol.typeof] = …
      …
```

_______________________________________________
es-discuss mailing list
[email protected]<mailto:[email protected]>
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]<mailto:[email protected]>
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to