On Mon, Aug 6, 2012 at 6:44 PM, Allen Wirfs-Brock <[email protected]>wrote:
> Based upon discussions last week in the "July 25, 2012 - TC39 Meeting > Notes" thread, I've created a new strawman proposal for a := operator. See > http://wiki.ecmascript.org/doku.php?id=strawman:define_properties_operator > > > := is a convient way to copy properties from one object to another or to > extend an object with new properties. It combines supports for many of the > same use cases as the previously proposed "object extension literals" and > the JSFixed Object.extend proposal. > > The most important characteristic of := is that it uses > [[DefineOwnProperty]] semantics rather than [[Put]] semantics to define > properties on its target object so it doesn't run into issues with > assignment to accessor properties or over-riding inherited readonly > properties. It is also smart about dealing with methods that reference > super. > > Some basic examples: > > target := src; //define all own properties of src onto target > > //add a method and an accessor to an existing prototype > Point.prototype := { > plus(aPoint) {return new > this.comstructor(this.x+aPoint.x,this.y+aPoint.y}, > get rho() {return Math.sqrt(this.x*this.x+this.y*this.y} > }; > > > Have at it, > Allen, Based on the semantics, specifically 4.I - 4.III, this doesn't work: var div = document.createElement("div"); // Create a new div that will be hidden div := { innerHTML: "<p>P child element that contains a Text node</p>", id: "my-div", hidden: true }; ...This is a pretty major use case that's satisfied by today's "extend" implementations. I took a crack at implementing your semantics as "Object.extend" to feel out any issues or "gotchas" and came up with a few. I've posted the impl as well as a few relevant tests in this gist: https://gist.github.com/3296375 (NOTE: The super binding is probably wrong or inadequate) I have a feeling that this may be overly complex, but I think that LeftHandSideExpression accessors should be enforced unless AssignmentExpression is defining new accessors of the same name. So, if the AssignmentExpression contains a _data_ property of the same name as an existing property in the LeftHandSideExpression that is an accessor, the value of the AssignmentExpression's data property should be assigned, not defined. I hope that makes sense. Rick > > Allen > > _______________________________________________ > 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

