Le 1 août 2013 à 00:53, Claude Pache <[email protected]> a écrit :
> > > Le 31 juil. 2013 à 20:23, "Tab Atkins Jr." <[email protected]> a écrit : > >> >> The first issue still up for community discussion involves the >> definition of "promise-like". >> >> We'd like the definition to be: (a) a Promise or subtype, or (b) a >> branded non-Promise (with the branding done via Symbol or similar). >> Promises/A+ wants the branding to be done via a method named "then" >> (the "thenable" concept). >> >> This, unfortunately, goes directly against TC39 practices in a number >> of other areas, such as iterators, where we don't want short string >> names as branding due to the possibility of collision. (In the case >> of "then", collision isn't a possibility, it's a certainty - we *know* >> there are libraries out there today that put a "then" method on their >> objects without referring to Promises.) Thoughts? > > I suggest an @@isPromise builtin symbol, which works the same way as > @@isRegExp in the ES6 spec [1]: An object is reputed to be a promise if and > only if it has a property (either own or inherited) named @@isPromise. And > `Promise.prototype` has initially an @@isPromise own property, so that > instances of subclasses of `Promise` are recognised as promises. > > (With this solution, you have not to choose between subclassing or branding, > but you have the both. :-) ) > > —Claude > > [1] search the occurrences of @@isRegExp in: > http://people.mozilla.org/~jorendorff/es6-draft.html > One more idea: a `Promise.register` function, which takes a class (i.e. a constructor) `C` as argument, and whose purpose is to declare that instances of `C` are to be treated as promises. Concretely, if the @@isPromise design is retained, that function can be implemented as following: ``` Promise.register = function(C) { C.prototype[@@isPromise] = true } ``` But the trick with the symbol is an implementation detail. —Claude
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

