Почему Chrome Dev Tool показывает даты __proto__ как недопустимую дату?

89

Я знаю, что __proto__это устарело (или не является частью стандарта) и все такое, но мне все еще любопытно, что это значит, когда он говорит о недопустимой дате, когда я смотрю на __proto__значение ..

var myDate = new Date(1331869050000);
Шейн Кортриль
источник

Ответы:

87

"Мне до сих пор любопытно, что означает недопустимая дата"

Это просто toStringзначение prototypeобъекта функции- Dateконструктора.


Date.prototype.toString(); // "Invalid Date"

Вы можете отменить его, если хотите ...

Date.prototype.toString = function() { return "I like turtles." };

var myDate = new Date(1331869050000);
myDate.__proto__; // I like turtles.

Немного не по теме, но __proto__есть в текущем рабочем проекте следующей версии ECMAScript, кодовое имя Harmony.

http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts

  • Добавлен раздел B.3.1 с указанием __proto__функции.
пользователь1106925
источник
49
Вы близки, но часть «почему» все еще отсутствует, причина в том, что Date.prototypeобъект сам по себе является объектом Date, но его [[PrimitiveValue]]внутреннее свойство NaN(это внутреннее свойство объектов даты хранит значение времени ), поэтому оно не представляет на самом деле действительная дата. Date.prototypeэто объект, похожий на new Date(NaN)...
Кристиан С. Сальвадо
@CMS: Имеет смысл. Это хорошая информация. Если хотите, можете добавить его к ответу.
4
так что в основном ошибки нет, и Chrome просто отражает toString (), который не показывает истинное значение
Кэт Лим Руис
3
Плюс один из любви к черепахам
Гай
2

учитывая, что вы создали новый объект Date, я бы не стал об этом беспокоиться. Причина в том, что если вы попробуете этот код:

var myDate = new Date(1331869050000);
alert(typeof myDate.getMonth != 'undefined')    //true

Это определит, что вы наследуете методы объектов Date и что фактически определено Date IS.

Если вы хотите продолжить расследование, прочтите этот пост.

Бен Сьюардс
источник
0

Прототип экземпляра Date не имеет определенного значения. Только экземпляр имеет значение. Вы определяете его, когда создаете его экземпляр.

dmvianna
источник