เหตุใด Chrome Dev Tool จึงแสดงวันที่ __proto__ เป็นวันที่ไม่ถูกต้อง


89

ฉันรู้ว่า__proto__เลิกใช้แล้ว (หรือไม่ได้เป็นส่วนหนึ่งของมาตรฐาน) และทั้งหมดนั้น แต่ฉันก็ยังอยากรู้ว่ามันหมายถึงอะไรเมื่อมันบอกว่า Invalid Date เมื่อฉันดู__proto__ค่าของ ..

var myDate = new Date(1331869050000);

คำตอบ:


87

"ฉันยังสงสัยอยู่ว่ามันหมายความว่าอย่างไรเมื่อมีข้อความว่า Invalid Date"

นั่นเป็นเพียง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)...
Christian C. Salvadó

@CMS: เข้าท่า เป็นข้อมูลที่ดี อย่าลังเลที่จะเพิ่มลงในคำตอบหากคุณต้องการ

4
โดยพื้นฐานแล้วไม่มีข้อผิดพลาดและ Chrome ก็สะท้อน toString () ซึ่งไม่แสดงค่าที่แท้จริง
Kat Lim Ruiz

3
บวกหนึ่งสำหรับความรักของเต่า
Guy

2

เมื่อพิจารณาว่าคุณสร้างวัตถุ Date ใหม่ฉันก็ไม่ต้องกังวลกับมัน เหตุผลก็คือถ้าคุณลองใช้รหัสนี้:

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

สิ่งนี้จะกำหนดว่าคุณกำลังสืบทอดเมธอด Date object และในความเป็นจริง Date IS กำหนดไว้

หากคุณต้องการตรวจสอบเพิ่มเติมโปรดดูที่ นี้โพสต์


0

ต้นแบบของอินสแตนซ์ Date ไม่มีค่าที่กำหนด เฉพาะอินสแตนซ์เท่านั้นที่มีค่า คุณกำหนดเมื่อคุณสร้างอินสแตนซ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.