ES3.1 Object static methods rationale document

Brendan Eich brendan at
Wed Jul 16 23:20:20 PDT 2008

On Jul 16, 2008, at 10:14 PM, Kris Zyp wrote:

>>> Arguably, some of the need for direct prototype access is
>>> alleviated by providing the clone method.  However, there are still
>>> plenty of other situations where it is useful.
>> I observe that __proto__ in SpiderMonkey- and Rhino-based JS is
>> mostly used for cases covered by Object.create, with a minority use-
>> case that we've discussed before initializing it to null in object
>> initialisers to make maps (dictionaries).
> I am curious how Object.create covers this __proto__ use case of  
> making
> objects with a defined proto. Doesn't Object.create create a new  
> object and
> copy properties over?

ES3.1 draft dated 15-July-08: Object.create ( O [, Properties] )

The create method creates a new object with a specified prototype.  
When the static create method is called, the following steps are taken:

1.                If Type(O) is not Object throw a TypeError exception.

2.                Create a new object as if by the expression new  
Object() where Object is the standard built-in constructor with that  

3.                Call the standard built-in function  
Object.defineProperties with arguments Result(2) and Properties.

4.                Set the internal [[Prototype]] property of Result 
(2) to Result(1).

5.                Return Result(4).

> __proto__ allows objects with existing properties to
> have their proto defined in constant time, but isn't Object.create  
> still
> O(n), with n being the number of properties?

Object.create allows creation of a new Object instance with a  
designated prototype object initializing [[Prototype]].


-------------- next part --------------
An HTML attachment was scrubbed...

More information about the Es4-discuss mailing list