Allow native Symbols as computed property names (#6705)

The for-in loop in helpers.defineEnumerableProperties doesn't iterate over Symbols.
If Object.getOwnPropertySymbols exists, include the discovered values when defining properties.
This commit is contained in:
Adam Miller 2016-09-04 20:59:52 -07:00 committed by Justin Ridgewell
parent d8b4073536
commit 2d8fdf3045

View File

@ -278,6 +278,20 @@ helpers.defineEnumerableProperties = template(`
if ("value" in desc) desc.writable = true;
Object.defineProperty(obj, key, desc);
}
// Symbols are not enumerated over by for-in loops. If native
// Symbols are available, fetch all of the descs object's own
// symbol properties and define them on our target object too.
if (Object.getOwnPropertySymbols) {
var objectSymbols = Object.getOwnPropertySymbols(descs);
for (var idx in objectSymbols) {
var sym = objectSymbols[idx];
var desc = descs[sym];
desc.configurable = desc.enumerable = true;
if ("value" in desc) desc.writable = true;
Object.defineProperty(obj, sym, desc);
}
}
return obj;
})
`);