[Proxies] Refactoring prototype climbing in the spec

Allen Wirfs-Brock allen at wirfs-brock.com
Wed Nov 9 09:08:08 PST 2011

On Nov 9, 2011, at 3:17 AM, Tom Van Cutsem wrote:

> 2011/11/8 Allen Wirfs-Brock <allen at wirfs-brock.com>
> I don't think that [[GetP]] and [[PutP]] need to be "internal methods"
> In spec'ing this I think I would make them be "abstract operations". Internal methods are extensions points that can be over-ridden on a per object basis.  That is what [[Get]] and [[Put]] provides.  GetP and SetP define fixed operations.
> I proposed [[GetP]] and [[SetP]] as internal methods because Proxies would "inherit" the built-in behavior for [[Get]] and [[Put]], but "override" the [[GetP]] and [[SetP]] operations. If [[GetP]] and [[SetP]] become abstract operations, won't they need to explicitly dispatch? Proxies could override [[Get]] and [[Put]], but that would require them to duplicate the Object [[Get]] and [[Put]] code.

[[Get]] seems to do nothing but redispatch to [[GetP]] so its definition could be replaced with the body of [[GetP]].

[[Puit] does a redispatch to [[SetP]] followed by a "mode" based conditional throw depending upon the result of the [[SetP]]. I din't think the the throwing behavior needs (or even should) be over-ride able by a proxy (or even by an alternative internal implementation). I would factor the conditional throw code out of  [[Put]] and make it the responsibility of the caller.  In practice, this just means that I would define a new  Abstraction Operation that is used in place of direct calls to [[Put]].  The abstraction operation wold essentially have the definition you provide for [[Put]] except that it would call [[Put]] instead of [[SetP]] and the definition of [[Put]] would be replaced with the body of [[SetP]]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20111109/6f2d36f2/attachment.html>

More information about the es-discuss mailing list