Welcome. (And I know Electron has all the browser APIs. That was implied with the "combining Node and Chrome" part.)
----- 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, Apr 19, 2018 at 9:37 PM, kai zhu <kaizhu...@gmail.com> wrote: > appreciate the detailed counter-response and insight. fyi, electron is a > browser. > > -kai > > On 18 Apr 2018, at 6:46 AM, Isiah Meadows <isiahmead...@gmail.com> wrote: > > To expand in the first, there is some functionality they have had to expose > in the public API because people kept reading properties on those two > internal stream properties. > > Similarly, jQuery has had in the past people relying so much on bugs that > they had to turn some of them into features and document them in the source > code. It was specifically because so many of these cases were propping up in > the source code that they had to fork a new version (2.0) to fix all these > bugs without breaking everyone. They also created jQuery Migrate just to > help consumers migrate between patches, to notify people of certain bug > fixes and minor changes that would otherwise break quite a few people's > existing code bases. > > Or, in summary, as a library author, if you expose it, even if you don't > document it, or even if you specifically warn people to not rely on it, > people *will* inevitably find ways to depend on it, making some forms of bug > fixes or other improvements practically impossible. In fact, this similar > concern is why Python introduced its name mangling convention for > `self.__foo` private variables - people clashing and/or otherwise relying of > private data. For what it's worth, soft private (accessible via reflection, > like Java, Ruby, etc.) is sufficient if you don't support subclassing, but > it's when you do, that's where you need hard privacy (like C++, etc.). > > And don't forget: not all projects are particularly small, not all JS is > simple glue code, and non-browser use cases aren't even obscure. (Slack for > desktop is based on Electron, a platform combining Node and Chrome, and both > PayPal's and Ebay's entire production backends use Node. Oh, and even NASA > has picked it up for a few things on Earth, primarily for data processing at > scale.) So if you're going to continue to blast and ignore it, please do > your research first and realize they have unique needs themselves. > > On Tue, Apr 17, 2018, 18:12 Isiah Meadows <isiahmead...@gmail.com> wrote: >> >> If you don't need them, don't use them. The use for them is three-fold: >> >> 1. Not trusting people to avoid relying on API implementation details >> (think: Node.js `_readableStream`/`_writableStream` used so frequently out >> of core they've ran into issues updating it even in patch releases). >> 2. In the face of inheritance, avoiding name collision. (This is a big one >> at scale, not so much in a 30k web app.) >> 3. Giving engines the ability to better structure object allocation and >> property access. This is *very* useful for perf critical scenarios. >> >> Finally, if you don't need them, don't use them. But keep in mind, there >> is a use case and a need. >> >> On Tue, Apr 17, 2018, 02:17 kai zhu <kaizhu...@gmail.com> wrote: >>> >>> as a javascript web-developer, can someone educate me on how private >>> class methods/fields would make one's life easier (rather than harder) >>> in getting web-projects shipped? >>> >>> ``` >>> /* >>> * how is this cited example better than using a plain object in a >>> web-project? >>> * can someone give actual common problems in >>> * debugging/integrating/shipping web-projects, >>> * that private methods/fields could help simplify (rather than >>> complicate)? >>> */ >>> class HashTable { >>> constructor() { >>> private[Symbol.for('length')] = 0 >>> } >>> set(key, value) { >>> private[key] = value >>> } >>> get(key) { >>> return private[key] >>> } >>> } >>> ``` >>> >>> >>> On 4/17/18, Sultan <thysul...@gmail.com> wrote: >>> >>An instance has a fixed set of private fields which get created at >>> >> object >>> > creation time. >>> > >>> > The implications of this alternative does not necessarily limit the >>> > creation of private fields to creation time, for example writing to a >>> > private field in the constructor or at any arbitrary time within the >>> > lifecycle of the instance. >>> > >>> > class HashTable { >>> > constructor() { >>> > private[Symbol.for('length')] = 0 >>> > } >>> > set(key, value) { >>> > private[key] = value >>> > } >>> > get(key) { >>> > return private[key] >>> > } >>> > } >>> > >>> >>How do you deal with inner nested classes wanting to refer to outer >>> > classes' private fields? >>> > >>> > Not sure i understood what you mean by this? >>> > >>> > >>> > On Tue, Apr 17, 2018 at 1:43 AM, Waldemar Horwat <walde...@google.com> >>> > wrote: >>> > >>> >> On 04/13/2018 09:41 PM, Sultan wrote: >>> >> >>> >>> >Writing your private field to an object that's not an instance of >>> >>> your >>> >>> class. >>> >>> >and then invoking the above write method with a this value that's >>> >>> not >>> >>> an instance of A, such as a proxy. >>> >>> >>> >>> Given: >>> >>> >>> >>> class A { >>> >>> private id = 0; >>> >>> private method(value) { >>> >>> return value; >>> >>> } >>> >>> write(value) { >>> >>> private(this)["id"] = private["method"](value); >>> >>> } >>> >>> } >>> >>> >>> >>> I imagine this means trying to do something along the lines of: >>> >>> >>> >>> (new A()).write.call({}, 'pawned'); >>> >>> >>> >>> This would fail. The private syntax call site would be scoped to the >>> >>> provider class. For example imagine the current possible >>> >>> transpilation >>> >>> of >>> >>> this: >>> >>> >>> >>> ;(function (){ >>> >>> var registry = WeakMap(); >>> >>> >>> >>> function A () { >>> >>> registry.set(this, {id: 0}) >>> >>> } >>> >>> A.prototype.write: function () { >>> >>> registry.get(this)["id"] = >>> >>> registry.get(this.constructor)["method"].call(this, >>> >>> value); >>> >>> } >>> >>> >>> >>> // shared(i.e private methods) >>> >>> registry.set(A, { >>> >>> method: function (value) { >>> >>> return value; >>> >>> } >>> >>> }); >>> >>> >>> >>> return A >>> >>> })(); >>> >>> >>> >>> Trying to do the the afore-mentioned forge here would currently fail >>> >>> along the lines of cannot read property "id" of "undefined". >>> >>> >>> >> >>> >> OK, so that aspect of the proposal looks the same as the existing >>> >> private >>> >> proposals — an instance has a fixed set of private fields which get >>> >> created >>> >> at object creation time. There are tricky additional wrinkles when it >>> >> comes to inheritance, but you can look them up in the existing >>> >> proposals. >>> >> >>> >> Are the only significant changes the different property naming syntax >>> >> and >>> >> that you provide a way to map strings to private slots? How do you >>> >> deal >>> >> with inner nested classes wanting to refer to outer classes' private >>> >> fields? >>> >> >>> >> Waldemar >>> >> >>> > >>> _______________________________________________ >>> 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