On Dec 11, 2012, at 10:00 AM, Rick Waldron wrote:
>
>
>
> On Tue, Dec 11, 2012 at 12:28 PM, Allen Wirfs-Brock <[email protected]>
> wrote:
> I'm the past we discussed issues surrounding the semantic differences between
> "put" and "define" and we've agreed to include Object.assign in ES6. We have
> also discussed Object.define but have not yet made a decision to include it.
>
> Nicholas Zaka recently posted a short article that addresses issues relating
> to the assign/define distinction
> http://www.nczonline.net/blog/2012/12/11/are-your-mixins-ecmascript-5-compatible/
> as they already surface in ES5.
>
> For me, this article reenforces that we really need to have something like
> Object.define in ES6.
>
> It also made me think that perhaps Object.mixin might be a more intuitive
> name for such a function.
>
> This name is certainly more real-word-friendly.
>
> The example code that follows "A pure ECMAScript 5 version of mixin() would
> be:" is basically what I imagined Object.define would be, but with a slight
> modification in that Object.assign returns the target object, so should
> Object.mixin:
Except,
1) It needs to iterate own keys, not just string valued property names so it
will pick up properties whose keys are symbols
2) It needs to rebind super references
3) I don't see any reason that it should be restricted to enumerable
properties. If the intend is to deprecate enumerable along with for-in then we
should be adding new functionality that is sensitive to the state of the
enumerable attribute.
Allen
>
> Object.mixin = function(receiver, supplier) {
> return Object.keys(supplier).reduce(function(receiver, property) {
> return Object.defineProperty(
> receiver, property, Object.getOwnPropertyDescriptor(supplier, property)
> );
> }, receiver);
> };
>
>
> var a = {}, name = "Rick";
>
> var b = Object.mixin(a, {
> get name() {
> return name;
> }
> });
>
> console.log( a.name ); // "Rick"
> console.log( b.name ); // "Rick"
> console.log( a === b ); // true
>
>
> Rick
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss