I've ran into this bug due to non-enumerable accessors:
https://github.com/tweenjs/tween.js/issues/267

The problem is that Tween.js does not detect the getters/setters in a
for..in loop.

The solution I came up with is ugly, re-defining the descriptors to be
enumerable, as demonstrated below. Is there a better way? Why are accessors
non-enumerable when (to end user who use the properties to access values)
they are used in the exact same way that "properties" are? It seems that
they should be enumerable because whether or not they are "accessors" is
not the end user's concern, they merely access the "property"...

```js
class XYZValues {
    constructor(x = 0, y = 0, z = 0) {
        this._x = x
        this._y = y
        this._z = z
    }

    onChanged() {}

    set x(value) {
        this._x = value
        this.onChanged()
    }
    get x() { return this._x }

    set y(value) {
        this._y = value
        this.onChanged()
    }
    get y() { return this._y }

    set z(value) {
        this._z = value
        this.onChanged()
    }
    get z() { return this._z }
}

const xDesc = Object.getOwnPropertyDescriptor(XYZValues.prototype, 'x')
xDesc.enumerable = true
Object.defineProperty(XYZValues.prototype, 'x', xDesc)

const yDesc = Object.getOwnPropertyDescriptor(XYZValues.prototype, 'y')
yDesc.enumerable = true
Object.defineProperty(XYZValues.prototype, 'y', yDesc)

const zDesc = Object.getOwnPropertyDescriptor(XYZValues.prototype, 'z')
zDesc.enumerable = true
Object.defineProperty(XYZValues.prototype, 'z', zDesc)

export {XYZValues as default}
```


*/#!/*JoePea
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to