strawman for the := operator

Rick Waldron waldron.rick at
Wed Aug 8 09:32:27 PDT 2012

On Mon, Aug 6, 2012 at 6:44 PM, Allen Wirfs-Brock <allen at>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
> := 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,


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"

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:

(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

I hope that makes sense.


> Allen
> _______________________________________________
> es-discuss mailing list
> es-discuss at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list