The behavior of everything currently used with `new` would need to be preserved, too - including `class`.
On Mon, Nov 26, 2018 at 7:24 PM Ranando King <[email protected]> wrote: > I've always understood the purpose of a prototype to be a means of > including pre-defined data and behavior in an object. Classes are just a > convenient means of defining those things in a prototype-oriented language, > and from a class POV, the prototype serves the role of the class template. > You did just make me think of something though. In the interest of not > adding another pragma, this feature could, and probably should be limited > to just the prototypes of objects created with the `new` keyword. This > would leave objects created manually alone, preserving the old behavior for > object literals and factory functions. > > As for your suggestion, that doesn't work when the element being changed > is on a sub-property of the object. > > ```js > class Example { > constructor() { > this.x = Object.create(this.x); > } > } > Example.prototype.x = { > y: { > a: 0, > b: 1, > c: 2 > } > }; > const e1 = new Example(); > const e2 = new Example(); > console.log(e1.x === e2.x); // false > console.log(e1.x.hasOwnProperty("y")); // false > console.log(e2.x.hasOwnProperty("y")); // false > console.log(e1.x.y.c); // 2 > console.log(e2.x.y.c); // 2 > e1.x.y.c = 4; > console.log(e1.x.hasOwnProperty("y")); // false > console.log(e2.x.hasOwnProperty("y")); // false > console.log(e1.x.y); // 4 > console.log(e2.x.y); // 4 > ``` > > On Mon, Nov 26, 2018 at 5:21 PM T.J. Crowder < > [email protected]> wrote: > >> From the proposal: >> >> > .,..some of which attempt to obviate the use of the prototype for >> > its intended purpose as the template for an instantiation by new... >> >> I wouldn't say that's "the intended purpose" of a prototype at all. >> That's more a class-centric view of prototypes. Prototypical inheritance is >> *different* from class-based inheritance. Prototypes aren't templates, >> they're living objects. >> >> If you want every instance of a class to have an object property that you >> can modify in a per-instance way, make that object property an object >> backed by a prototype: >> >> ```js >> class Example { >> constructor() { >> this.x = Object.create(this.x); >> } >> } >> Example.prototype.x = { >> y: 0 >> }; >> const e1 = new Example(); >> const e2 = new Example(); >> console.log(e1.x === e2.x); // false >> console.log(e1.x.hasOwnProperty("y")); // false >> console.log(e2.x.hasOwnProperty("y")); // false >> console.log(e1.x.y); // 0 >> console.log(e2.x.y); // 0 >> e1.x.y = 1; >> console.log(e1.x.hasOwnProperty("y")); // true >> console.log(e2.x.hasOwnProperty("y")); // false >> console.log(e1.x.y); // 1 >> console.log(e2.x.y); // 0 >> ``` >> >> Once decorators are up and running, doing this could be a decorator, >> though I submit it's an edge case. >> >> -- T.J. Crowder >> > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss >
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

