В ES5 , Boolean.prototype
является логическим объектом:
Логический объект-прототип сам по себе является логическим объектом (его [[Class]] равен "Boolean")значение которого равно false.
В ES6 / ES2015 это не так:
Логический объект-прототип является обычным объектом.Он не является логическим экземпляром и не имеет внутреннего слота [[BooleanData]].
В ES2016 это еще раз:
Логический прототип сам по себе является логическим объектом;он имеет [[BooleanData]] внутренний слот со значением false.
(и так же остается в ES2017.)
То же самое верно для Number.prototype
иString.prototype
- тогда как, с другой стороны, Date.prototype
и RegExp.prototype
также начинались как экземпляры их соответствующих [[Class]] в ES5.1, стали простыми Objects
в ES6 и остались такими же с тех пор.
Возвращение в ES2016, по-видимому, не было предметом какого-либо предложения tc39 .
Почему эти изменения были сделаны в ES6, а затем (только) частично отмененыв ES2016?
(Этот вопрос не только для академического / исторического интереса: я работаю над диалектом JavaScript, который предназначен не для того, чтобы включать примитивные типы в штучной упаковке, но который все еще требует, чтобы объекты .prototype
содержали всеметоды, которые можно вызывать на примитивных значениях, и хотя в особых случаях объекты .prototype
являются единственными экземплярами их соответствующих [[Class]] объектов, я бы хотел понять, почему это может быть желательно.)