On Wed, Dec 12, 2012 at 11:13 AM, Allen Wirfs-Brock <[email protected]>wrote:
> > On Dec 12, 2012, at 10:10 AM, John J Barton wrote: > > On Wed, Dec 12, 2012 at 10:05 AM, Allen Wirfs-Brock <[email protected] > > wrote: > >> >> On Dec 12, 2012, at 9:50 AM, John J Barton wrote: >> ... >> > But most of all we want this feature to land and not just spin around >> here. >> > >> > jjb >> >> As Object.mixin or as Object.define?? >> > > Object.mixin > > > What should be the effect of trying to "mixin" a property that already > exists (as an own property) of the target object. > > Object.define(target,src) would presumably have redefined such properties > using the Object.defineProperty rules. Is that what Object.mixin should do. > It could, have different rules. > > For example, it could simply replace an existing target property (if the > existing property is configurable). Or it could skip existing properties > or throw an error if a property exists. > > Replace is attractive, but it may or may not be what you want for accessor > properties. Consider: > > var objTarget = {get foo() {/*target*/...}}); > Object.mixin(objTarget, {set foo(v) {/*src*/...}}); > > after the mixin do you want objTarget to look like: > {set foo(v) {/*src*/...}} //replace semantics gives you this > or > {set foo(v) {/*src*/...}, > get foo() {/*target*/...} } //Object.defineProperty semantics gives > you this > The general character of Object.mixin is to produce an object with all of the properties of both arguments. In the case of duplicate *properties* we want replace LHS with RHS. In my opinion your example is not such a duplicate. Rather we have two functions one on each argument. I would expect the general character to apply: two functions on the result. Or maybe this should just throw. Either of the above choices will cause surprising errors if the developer expected the other result. jjb > > Allen > >
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

