ES3.1 Object static methods rationale document

Garrett Smith dhtmlkitchen at gmail.com
Fri Jul 18 12:27:53 PDT 2008


On Fri, Jul 18, 2008 at 10:56 AM, John Resig <jresig at mozilla.com> wrote:
>
>> Not true. YAHOO.lang.extend uses prototypal inheritance.
>
> YAHOO.lang.extend is similar in name only - YAHOO.lang.augmentObject is the one that's actually similar to the functionality used by other code bases.
>

You're prev response seems to have come from the discussion of
Object.create. Object.create, with only one argument, is the same as
beget. The beget function makes a new object that inherits members
from an existing object. The rationale doc fails to make mention of
this.

Is YAHOO.lang.extend(Sub, Sup, extras) less similar in functionality
to object.create(sub, super) than the other augmentation rountines?

I think it's worth a look.

s = new Sub;

s -> [[Prototype]] => Sub.prototype
s -> [Prototype]] [[Prototype]] Super.prototype

Object.create from "rationale doc"

Function 'getPropertyDescriptorObject' would be a fictitious method
that is somehow able to get all of the properties in Sup.prototype
(even the DontEnum ones), and convert that into an object that matches
the "propertyDescriptor" here.

Object.create(Sub.prototype, getPropertyDescriptorObject(Sup.prototype));

s = new Sub;

s -> [[Prototype]] => Sub.prototype
s -> [Prototype]] [[Prototype]] Super.prototype

YAHOO.lang.extend seems more closely related to Object.create than any
of all of the rest of the code you (John) posted up; particularly the
real version of first one (jQuery):-
http://jqueryjs.googlecode.com/svn/trunk/jquery/src/core.js

Garrett

> --John
>



More information about the Es4-discuss mailing list