you never set d[a] to any value.
Because of this, d[a] evaluates to undefined, and you can’t set properties on undefined.
If you add d[a] = {} right after d = {} things should work as expected.
Alternatively, you could use an object initializer:
d[a] = {
greetings: b,
data: c
};
Or you could set all the properties of d in an anonymous function instance:
d = new function () {
this[a] = {
greetings: b,
data: c
};
};
If you’re in an environment that supports ES2015 features, you can use computed property names:
d = {
[a]: {
greetings: b,
data: c
}
};