Question about reusing object used in Object.defineProperty

# J B (12 years ago)

var obj = {};

Object.defineProperty(this, 'foo', obj.value = 0); Object.defineProperty(this, 'foo2', obj.value = 1);

vs.

Object.defineProperty(this, 'foo', {value:0}); Object.defineProperty(this, 'foo2', {value:1});

Would the former method help with reducing object allocation (and therefore gc), or are there compiler optimizations that will automatically make the former as efficient?

# J B (12 years ago)

*Would the former method help with reducing object allocation (and therefore gc), or are there compiler optimizations that will automatically make the latter as efficient?

# J B (12 years ago)

*oops:

obj.value = 0; Object.defineProperty(this, 'foo', obj); obj.value = 1; Object.defineProperty(this, 'foo2', obj);

# Brendan Eich (12 years ago)

I wouldn't worry about object literal allocations for such (typically one-time, up front) Object.defineProperty calls.

Also, es-discuss is not really the place to ask about how to write this code.

# Andrea Giammarchi (12 years ago)

If I might, and sinve I've been using this or that for a while, I rather find it convenient to use .value when you have other properties too instead of writing them all the time.

That being said, for "few shots" ain't such big GC issue and actually some engine is faster in doing this {value:value} rather than obj.value = value; then pass the reference.

However, if you have a generic utility that would do that all the time or many times per loop for whatever reason, the GC kicks might be painful in lower end ARM devices and older Android 2.3 and 4.0 so in latter case you better recycle the single object.

Slightly slower but much linear GC operations (you can test that with any debugger by your own)