Чому 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 зберігає значення часу ), тому вона не представляє фактично дійсна дата. Date.prototypeє об’єктом, подібним до new Date(NaN)...
Крістіан Сальвадо

@CMS: Має сенс. Це гарна інформація. Не соромтеся додавати його до відповіді, якщо хочете.

4
отже, в основному помилок немає, а Chrome просто відображає toString (), який не показує справжнього значення
Kat Lim Ruiz

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.