[Proposal] Refer to actual value : keyword "itself"

# Imeian . (5 years ago)

When we need to change a value using the old value :

variable = itself + 5 // instead of
variable = variable + 5
object.child.property = itself / 5 // instead of
object.child.property = object.child.property / 5

Changing a value in nested objects is a pain, like Redux states for eg.

return {
    ...state,
    child: {
        ...state.child,
        subchild: {
            ...state.child.subchild,
            property: state.child.subchild.property + 1
        }
    }
}

would then be

return {
    ...state,
    child: {
        ...itself,
        subchild: {
            ...itself,
            property: itself + 1
        }
    }
}
# Cyril Auburtin (5 years ago)

You could currently do

object.child.property /= 5

with destructuring:

const {child: {subchild}, child} = state;

return {
  ...state,
  child: {
    ...child,
    subchild: {
      ...subchild,
      property: subchild.property + 1
    }
  }
}

or do-expressions:

return {
  ...state,
  child: do {
    const {child} = state;
    return {
      ...child,
      subchild: do {
        const {subchild} = child;
        return {
          ...subchild,
          property: subchild.property + 1
        };
      }
    };
  }
}

note: your property: itself + 1 looks incorrect, since you probably mean to increment the property property

# Cyril Auburtin (5 years ago)

Oops I forgot do-expression don't use return, so something, a bit ugly, like:

return {
  ...state,
  child: do {
    const {child} = state;
    ({
      ...child,
      subchild: do {
        const {subchild} = child;
        ({
          ...subchild,
          property: subchild.property + 1
        });
      }
    });
  }
}
# Imeian . (5 years ago)

Yes of course I could use the /= operator in this simple example, but not in more complex operations.

About itself in a property, it's correct : I mean itself to refer to the actual value, the value being from a variable or an object property doesn't matter. itself would not be a this equivalent, so whenever itself is used it refers to the actual value we are assigning

# Herby Vojčík (5 years ago)

On 6. 9. 2019 10:34, Cyril Auburtin wrote:

You could currently do

object.child.property /= 5

with destructuring:

const {child: {subchild}, child} = state;

Wow, I didn't know I can do that. Nice.

# Cyril Auburtin (5 years ago)

also optional-chaining will help

return {
    ...state,
    child: {
        ...state?.child,
        subchild: {
            ...state?.child?.subchild,
            property: (state?.child?.subchild?.property ?? 0) + 1
        }
    }
}

@Herby yes that's interesting, works in any order actually const {child, child: {subchild}} = state;

# Jordan Harband (5 years ago)

var itself = 3; means that your choice of keyword wouldn't be an option; you'd be limited to something that was currently a syntax error.

# Sultan (5 years ago)

Can you currently do this with the "super" keyword outside of classes?