On Mar 20, 2012, at 2:10 PM, John J Barton wrote:

> I've been reading a lot of nicely written JS in the Traceur compiler.
> They use a very conservative Java-like approach with Constructor
> functions and literal prototype property declarations. Sadly they must
> include workarounds for Object.create:
> 
> http://code.google.com/p/traceur-compiler/source/browse/src/traceur.js#80
> 
> WebInspector has a bit more rough and ready JS style, eg
> 
> WebInspector.View.prototype.__proto__ = WebInspector.Object.prototype;
> 
> Here's the irony: we can change the WebInspector code to use
> Object.create() specifically because they do not use object literal
> declarations for functions (and thus one line will make improvement).
> 
> Since es-discuss seems quite keen on object literals, a couple of
> small improvements would help code move in your direction:
> 
>  A version of Object.create() that takes an object RHS.

Because you explicitly mention object literals, I assume your intent would be 
to use an object literal as the second argument to such functions.  For example 
such as is done in [1] that starts out as:

  LoadCodeUnit.prototype = traceur.createObject(CodeUnit.prototype, {
    allowLoad: true,

    get moduleSymbol() {
      return this.project.getModuleForUrl(this.url)
    },
    ...

In ES.next, based upon current proposals, the equivalent can be directly 
expressed  using <| without any additional function calls:

  LoadCodeUnit.prototype = CodeUnit.prototype <| {
    allowLoad: true,

    get moduleSymbol() {
      return this.project.getModuleForUrl(this.url)
    },
    ...
In other words, <| is the operator forms of the function you are requesting for 
the object literal use case.  Note that the operator form is likely to be 
significantly more efficient as it only needs to do one object allocation.  The 
function form has to allocated the object literal that is passed as the 
argument to createObject and and then allocate a second object within 
createObject (and copy poperties between the two).



[1] 
http://code.google.com/codesearch#IW7-zY8plzo/trunk/src/runtime/modules.js&q=createObject%20package:http://traceur-compiler%5C.googlecode%5C.com&l=195
 


> 
>  Object.merge() that merges the own non-function properties as own
> properties, the non-built-in-functions as prototype properties. (a
> compromise of the two common versions of extend, own and 'in'
> versions).

and what about own built-in function properties? 

We have talked about providing some form of "extend".  Do you have specific 
usage scenarios that support the specific set you rules you just listed. 

Allen






> 
> jjb
> _______________________________________________
> 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

Reply via email to