Отсутствие век неправильно, вы просто не можете переназначить прототипы внутренних типов , таких как Object, Number и т. Д. Вы можете только добавлять новые свойства.
> Number.prototype
-> Number
> Number.prototype = {} // Reassignment fails
-> Object
> Number.prototype
-> Number
> Number.prototype.objSayHello = 'hi' // Appending succeeds
-> 'hi'
> n = new Number(); n.objSayHello
-> 'hi'
Если вы используете свои собственные объекты, то вы можете обновить или переназначить прототип (примечание: переназначение прототипа повлияет только на новые объекты, но не на существующие).
Не изменяйте интригующие прототипы! Это «плохая вещь», потому что она может вызвать трудно обнаруживаемые побочные эффекты. Если вам нужен базовый тип с новыми свойствами, то создайте новый объект с прототипом, указывающим на базовый объект:
NewObject = function() {};
NewObject.prototype = Object.prototype;
NewObject.prototype.value = 123;
Теперь у вас есть конструктор, который создает новые объекты, которые наследуют свойства как от своего собственного прототипа (например, 'value'), так и от прототипа Object ('toString', 'hasOwnProperty' ...).