Почему 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__функции.

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 не имеет определенного значения. Только экземпляр имеет значение. Вы определяете его, когда создаете его экземпляр.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.