في "دليل JavaScript الذي تم تأليفه" يوم الأمس ، Notes 10: ECMASCRIPT 5 نموذج كائن محسّن ، حدثت ظاهرة غريبة عند تصحيح قطعة من الكود. انشر الآن رمز المصدر أدناه:
نسخة الكود كما يلي:
<script type = "text/javaScript">
وظيفة person () {}
var per = شخص جديد ؛
Object.DefineProperties (لكل ،
{
"كنية":
{
القيمة: "توم" ،
قابل للكتابة: صحيح
} ،
"عمر":
{
القيمة: 20 ،
قابلة للتكوين: خطأ ،
قابلة للكتابة: خطأ
}
}) ؛
var o = object.getownProperTyDescriptor (per ، "lamname") ؛
ALERT (json.stringify (o)) ؛
</script>
نتائج التشغيل في Google:
http://img.blog.csdn.net/20140529073008296؟watermark/2/text/ahr0cdovl2jsb2cuy3nkbi5uzxqv DTAXMTA0MZG0MW ==/FONT/5A6L5L2T/FONTSIZE/400/FILL/I0JBQKFCMA ==/SOMPLE/70/GRAVITY/CENTER
هذه النتيجة صحيحة ، ولكن إذا قمت بتغييرها إلى مكان آخر ، فستكون النتيجة مختلفة
نسخة الكود كما يلي:
<script type = "text/javaScript">
وظيفة person () {}
var per = شخص جديد ؛
Object.DefineProperties (لكل ،
{
"كنية":
{
القيمة: "توم" ،
قابل للكتابة: صحيح
} ،
"عمر":
{
القيمة: 20 ،
قابلة للتكوين: خطأ ،
قابلة للكتابة: خطأ
}
}) ؛
var name = object.getOntOnproperTyDescriptor (Per ، "Lamname") ؛
ALERT (json.stringify (name)) ؛
</script>
نتائج التشغيل:
لماذا هذا؟ فقط غيرت اسم متغير بسيط
تكمن المشكلة في الاسم ، لكنني لا أفهمها. لقد بحثت عن المعلومات عبر الإنترنت ولكن لم يكن لدي أي نتائج. في وقت لاحق ، ذهبت لأسأل شقيقًا كبيرًا ووضعت المشكلة في المنتدى: http://bbs.csdn.net/topics/390799744؟page=1#post-397474060 ،
الاسم هو خاصية نافذة ، يتم استخدامها لتعيين أو إرجاع اسم النافذة ، ونوع البيانات عبارة عن سلسلة. نظرًا لأن الجملة الأولى هي وظيفة person () {} ، فقد انتهت ، وبالتالي قد يكون الكود التالي في السياق العالمي ، أي أنك في حالة تأهب (json.stringify (الاسم)) ؛ هو إخراج اسم var أعلاه ، ولكن في الواقع ، قد يكون window.name الإخراج. أما بالنسبة للإخراج [كائن الكائن] ، فإن هذا النوع هو نوع قيمة الاسم.