> it becomes awkward in javascript when time comes > around to serializing/reconstructing the custom array-type
To be honest, I've found that overriding `toJSON()` and providing some static helpers for your `JSON.parse()` reviver lead to pretty expressive (de)serializability: class MySerializableArray extends Array { toJSON() { return { $type: this.constructor.name, items: Object.values(this) } } static isSerializedInstance(val) { return typeof val === 'object' && val.$type === 'MySerializableArray' && Array.isArray(val.items); } } const reviver = (key, val) => { if (MySerializableArray.isSerializedInstance(val)) { return new MySerializableArray(...val.items); } return val; }; const instance = new MySerializableArray('a', 'b', 'c'), serialized = JSON.stringify(instance), parsed = JSON.parse(serialized, reviver); https://jsbin.com/kasiwevobo/edit?js,console If that's too much boilerplate for you, there's probably some low hanging fruit for a decorator implementation that generalizes some reasonable default serialization behavior. On Sat, Nov 25, 2017 at 2:14 AM, kai zhu <kaizhu...@gmail.com> wrote: > it may be standard-operating-procedure to sub-class builtin arrays in > other languages. but it becomes awkward in javascript when time comes > around to serializing/reconstructing the custom array-type while > baton-passing it around frontend<->backend<->database via JSON. > > On 11/3/17, Andrea Giammarchi <andrea.giammar...@gmail.com> wrote: > > I agree with everything else you said but since you mentioned the word > > "misinformed" I'd like to improve this misleading sentence: > > > >> It's 99% sugar over the existing prototype-based model > > > > This has been one of the most misunderstood and undertaken parts of ES6. > > > > Classes are *not* just sugar, thinking about classes as just sugar that > can > > be replicated on ES5 is FUD and even if I've pointed out Babel > > documentation has a wrong description of classes it's still there and 99% > > of developers believe classes are like that, just sugar over prototypal > > inheritance. > > > > This is so wrong that TypeScript fails with the most basic extend: > > > > ```js > > class List extends Array { method() {} } > > > > (new List) instanceof List; // false > > (new List).method(); // throws because it's not a List so no method > > ``` > > > > To simulate ES2015 classes you need `Reflect.construct`, unavailable in > > ES5. > > Polyfilling Reflect.construct with ES5 features is not enough: you need > > Symbols too. > > > > Symbols are technically impossible to polyfill (i've gone very close, yet > > not a perfect poly). > > Symbols are needed to keep the instance so that in a transpiled world: > > > > ```js > > (new List).slice() instanceof List; // true > > ``` > > > > Most developers that went for classes have broken code out of the box > > thanks to transpilers and yet at the end of 2017 we keep writing that ES > > classes are just sugar on top of ES5. > > > > We should stop starting from this ML to keep spreading this wrong > > information. > > > > Thank you all for your understanding. > > > > Regards > > > > > > > > > > > > > > > > On Fri, Nov 3, 2017 at 4:49 AM, Isiah Meadows <isiahmead...@gmail.com> > > wrote: > > > >> Honestly, this entire thread reads as partially misinformed, > >> borderline trollbait. These kinds of questions and thoughts should > >> really be asked directly (and a bit more respectfully) to TC39 > >> representatives and/or put in blog posts wherever. es-discuss is > >> primarily about language design, and although the subject implies it's > >> about the language's design in the abstract, I'm not convinced the > >> content and responses really are. > >> > >> 1. Claims of a language "civil war" don't belong on this list, and are > >> objectively false. Yes, there's disagreement, but even TC39 members > >> aren't exactly in agreement here - consider the difference between > >> Lodash/Ecmarkdown (Domenic Denicola) and Ecmarkup (Brian Terlson). > >> Please take that into account. > >> 2. Yes, there are multiple idiomatic uses of JavaScript, but it's > >> large enough you can carve out a subset and be done with it. You don't > >> like classes? Don't use them. You don't like arrow functions? Don't > >> use them. You don't like `array.map`? Don't use it. Just because they > >> exist doesn't obligate you to use them, and they don't hurt you in any > >> way if you don't. Also, complaints of a person's or group's choice of > >> idiom do *not* belong on this list whatsoever. Leave that crap to a > >> private message, a blog post (if it's a group), or whatever. > >> 3. JavaScript "classes" are not technically class-based OOP, and TC39 > >> members have acknowledged this in blog posts. It's 99% sugar over the > >> existing prototype-based model, just with easier native subclassing. > >> You could in theory replicate this in the rest of the language with a > >> combination of `Object.defineProperty`, `Object.setPrototypeOf`, > >> `new.target`, and existing ES5. > >> ----- > >> > >> Isiah Meadows > >> m...@isiahmeadows.com > >> > >> Looking for web consulting? Or a new website? > >> Send me an email and we can get started. > >> www.isiahmeadows.com > >> > >> > >> On Thu, Nov 2, 2017 at 4:32 PM, doodad-js Admin <dooda...@gmail.com> > >> wrote: > >> > > >> > -----Original Message----- > >> > From: Claude Petit [mailto:p...@webmail.us] > >> > Sent: Thursday, November 02, 2017 4:24 PM > >> > To: 'kai zhu' <kaizhu...@gmail.com>; 'es-discuss' < > >> es-discuss@mozilla.org> > >> > Subject: RE: javascript vision thing > >> > > >> > For mostly real OOP under JS, please see my project (doodad-js). But I > >> can't warranty its future without a custom language because nobody on > >> TC39 > >> want to works along-side with me on that project, and they are making > >> their > >> own supposed "classes" which are not. > >> > > >> > -----Original Message----- > >> > From: kai zhu [mailto:kaizhu...@gmail.com] > >> > Sent: Wednesday, November 01, 2017 11:43 PM > >> > To: es-discuss <es-discuss@mozilla.org> > >> > Subject: javascript vision thing > >> > > >> > any thoughts? i'll break the ice with a quora question i recently > >> answered > >> > > >> > quora question: > >> >> Why is JavaScript so hated? > >> > > >> > answer posted: > >> >>the primary reason is because traditional oop skills gained from > >> c#/c++/java/python/etc translate poorly to javascript. > >> >> > >> >>in javascript, class-instantiated objects are inferior to > >> >> plain-objects, > >> because plain-objects come with JSON.stringify/JSON.parse baked-in, > while > >> classes require needless extra serialization/deserialization routines > >> which > >> can easily double your codebase or more (as real-world javascript-code > is > >> heavily i/o based). i would say many people burn-out from > >> frontend-programming because they can’t cope with debugging all the i/o > >> edge-cases serializing/deserializing their custom classes. > >> >> > >> >>javascript and frontend-programming is essentially about efficiently > >> managing the program-state like a baton, constantly passing it > >> back-and-forth between the browser’s ui and various backend-servers / > >> persistent-storage. plain json-objects utilizing idiot-proof > >> JSON.stringify/JSON.parse, are naturally better at this baton-passing > >> business than writing classes with custom serializers. > >> > > >> > > >> > > >> > there's currently a civil war going on in frontend-development, > between > >> those who don't want to deal with writing extra class-based > >> serializers/deserializers and those who do. these 2 different design > >> patterns have incompatible styleguides that often break web-projects > when > >> people try to mix-and-match both together. i don't have a simple > >> solution > >> to this issue, but tc39 should be made aware of it as they try to > >> formulate > >> a javascript vision that doesn't alienate frontend-development. > >> > > >> > -kai > >> > > >> > > >> > > >> > --- > >> > This email has been checked for viruses by AVG. > >> > http://www.avg.com > >> > > >> > _______________________________________________ > >> > es-discuss mailing list > >> > es-discuss@mozilla.org > >> > https://mail.mozilla.org/listinfo/es-discuss > >> _______________________________________________ > >> es-discuss mailing list > >> es-discuss@mozilla.org > >> https://mail.mozilla.org/listinfo/es-discuss > >> > > > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss > -- Jeremy Martin 661.312.3853 @jmar777 <https://twitter.com/jmar777> / @j <https://stream.live/j>
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss