В ES7 планируется добавить специальный способ обращения к символьным свойствам объекта через ::, например,
foo::some()
Как по мне, то данная фича очень нужна и я считаю, что все встроенные свойства и методы Object.prototype должны быть продекларированы именно так, например,
for (let key in foo) {
if (foo::getOwnPropertyDescriptor(key)) {
...
}
}
Это уберёт потенциальные ошибки при использовании объекта, как таблицы.
function foo(params) {
if (params.toString) {
alert('ffffuuuuu');
}
}
foo({});
А вот если бы базовый метод toString был бы символьный и доступен через :: то такой бы ошибки не было, а проблемы совместимости старого кода можно решить флагом:
'use es7-strict';
По аналогии с useAsm и useStrict.
К слову, символьные свойства были введены как раз, чтобы можно было безопасно расширять прототипы объектов, в частности и Object.prototype.