ใน "คู่มือ JavaScript ที่ได้รับอนุญาต" เมื่อวานนี้หมายเหตุการศึกษา 10: ECMASCript 5 โมเดลวัตถุที่ได้รับการปรับปรุงปรากฏการณ์แปลก ๆ เกิดขึ้นเมื่อทำการดีบักโค้ดชิ้นหนึ่ง ตอนนี้โพสต์ซอร์สโค้ดด้านล่าง:
การคัดลอกรหัสมีดังนี้:
<script type = "text/javascript">
ฟังก์ชันบุคคล () {}
var per = คนใหม่;
Object.defineProperties (ต่อ,
-
"ชื่อเล่น":
-
ค่า: "ทอม",
เขียนได้: จริง
-
"อายุ":
-
ค่า: 20,
สามารถกำหนดค่าได้: เท็จ
เขียนได้: เท็จ
-
-
var o = object.getownpropertydescriptor (ต่อ, "ชื่อเล่น");
การแจ้งเตือน (json.stringify (o));
</script>
การรันผลลัพธ์ใน Google:
http://img.blog.csdn.net/20140529073008296?watermark/2/Text/AHR0CDOVL2JSB2CUY3NKBI5UZXQV dtaxmta0mzg0mw ==/font/5a6l5l2t/fontsize/400/fill/i0jbqkfcma ==/ละลาย/70/แรงโน้มถ่วง/กลาง
ผลลัพธ์นี้ถูกต้อง แต่ถ้าคุณเปลี่ยนเป็นที่อื่นผลลัพธ์จะแตกต่างกัน
การคัดลอกรหัสมีดังนี้:
<script type = "text/javascript">
ฟังก์ชันบุคคล () {}
var per = คนใหม่;
Object.defineProperties (ต่อ,
-
"ชื่อเล่น":
-
ค่า: "ทอม",
เขียนได้: จริง
-
"อายุ":
-
ค่า: 20,
สามารถกำหนดค่าได้: เท็จ
เขียนได้: เท็จ
-
-
var name = object.getownpropertydescriptor (ต่อ, "ชื่อเล่น");
การแจ้งเตือน (json.stringify (ชื่อ));
</script>
ผลการทำงาน:
ทำไมถึงเป็นเช่นนี้? เพิ่งเปลี่ยนชื่อตัวแปรอย่างง่าย
ปัญหาอยู่ที่ชื่อ แต่ฉันไม่เข้าใจ ฉันค้นหาข้อมูลออนไลน์ แต่ไม่มีผลลัพธ์ ต่อมาฉันไปถามพี่ชายอาวุโสและวางปัญหาในฟอรัม: http://bbs.csdn.net/topics/390799744?page=1#post-397474060
ชื่อคือคุณสมบัติหน้าต่างซึ่งใช้ในการตั้งค่าหรือส่งคืนชื่อของหน้าต่างและชนิดข้อมูลเป็นสตริง เนื่องจากประโยคแรกคือ function person () {} จึงสิ้นสุดลงดังนั้นรหัสต่อไปนี้อาจอยู่ในบริบทของโลกนั่นคือคุณคิดว่าการแจ้งเตือน (json.stringify (ชื่อ)); เป็นเอาต์พุตชื่อ VAR ข้างต้น แต่อันที่จริงแล้วมันอาจเป็น Window.name Output สำหรับเอาต์พุต [วัตถุวัตถุ] ประเภทนี้เป็นประเภทของค่าของชื่อ