{}.prototype выдаёт ошибку в консоли, потому что {} - это не только новый объект, но и границы блока. ({}.prototype) в консоли работает верно.
Для предопределённых объектов (типа Object, Array и т.д.) прототипы имеет смысл изменять только в одном случае - эмуляция новых методов ECMAScript для старых браузеров, которые не поддерживают данные методы. Скажем, для функций часто используется .bind - привязка функции к контексту, но IE8 эту функциональность не поддерживает, поэтому приходится писать что-то вроде:
if (!Function.prototype.bind) {
Function.prototype.bind = function () {
//emulating code
}
}