On Sep 10, 2013, at 8:20 AM, Jason Orendorff wrote: > On Tue, Sep 10, 2013 at 6:31 AM, Domenic Denicola > <[email protected]> wrote: >> Note that determining desired pattern is relevant to the new DOM promises >> design (tracking this at >> https://github.com/domenic/promises-unwrapping/issues/25). Omitting a few >> steps not relevant to the issue under discussion, currently we do: >> >> - Let `then` be `Get(potentialThenable, "then")`. >> - If `IsCallable(then)`, call `then.[[Call]](potentialThenable, (resolve, >> reject))`. >> >> It seems like we'd want to apply the same logic here as we do to `valueOf` >> etc., which is what I tried to model this after. > > I think the simplest thing would be to replace [[Invoke]] with a > [[GetMethod]] trap, and the idiom would then be exactly as above, but > change `Get` to `GetMethod`. > > The last step of Invoke(O, P, args) would be replaced with: > > 6. Let method = O.[[GetMethod]](P, O). > 7. ReturnIfAbrupt(method). > 8. If IsCallable(method) is false, throw a TypeError. > 9. Return method.[[Call]](O, args).
Having to create a new bound function on every method call seems too expensive. But what about: 6. Let method = O.[[Get]](P). 7. ReturnIfAbrupt(method). 8. If IsCallable(method) is false, throw a TypeError. 9. Return O.[[InvokeFunction]](method,O, args). Using [[InvokeFunction]] the Proxy still mediates the [[Call]] to method but it is assume the [[Get]] step has already been performed and has produced method. Allen _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

