การใช้งานแบบอ้างอิง ECMAScript
การสร้างและทำลายอ็อบเจกต์มีที่เกิดขึ้นในกระบวนการทำงานของ JavaScript ซึ่งสำคัญสำหรับการเข้าใจลักษณะของภาษานี้ทั้งหมด
การประกาศและการสร้างตัวแปร
วิธีที่สร้างอ็อบเจกต์คือใช้คำสั่ง new หลังจากชื่อของชนิดที่ต้องการสร้างอ็อบเจกต์
var oObject = new Object(); var oStringObject = new String();
บรรทัดแรกสร้างอ็อบเจกต์หนึ่งของชนิด Object และเก็บไว้ในตัวแปร oObject. บรรทัดที่สองสร้างอ็อบเจกต์หนึ่งของชนิด String และเก็บไว้ในตัวแปร oStringObject. ถ้าไม่มีค่าพารามิเตอร์ในคอนสตรัคเตอร์ ตัวเลขหรือตัวอักษรเปิดและปิดกลุ่มไม่จำเป็นต้องใช้. ดังนั้น สามารถเขียนบรรทัดที่เหล่านั้นด้วยรูปแบบดังนี้
var oObject = new Object; var oStringObject = new String;
อ้างออบเจกต์
ในบทที่ผ่านมา เราได้เน้นนำเสนอข้อคิดเกี่ยวกับอ็อบเจกต์ที่มีอ้างออกฉากใน ECMAScript ไม่สามารถเข้าถึงตัวแปรทางฟิสิกส์ของอ็อบเจกต์ได้ แต่สามารถเข้าถึงอ้างออบเจกต์เท่านั้น. ในทุกครั้งที่สร้างอ็อบเจกต์ ตัวแปรที่เก็บอ้างออบเจกต์เป็นอ็อบเจกต์ ไม่ใช่ตัวแปรเอง
การยกเลิกอ็อบเจกต์
ECMAScript มีระบบรับเก็บความจำที่ไม่ใช้แล้ว (garbage collection routine) ซึ่งหมายความว่าไม่จำเป็นต้องทำการทำลายอ็อบเจกต์เพื่อปล่อยความจำ. เมื่อไม่มีการอ้างออบเจกต์อีกต่อไป ก็ว่าอ็อบเจกต์นั้นถูกยกเลิก (dereference) แล้ว. เมื่อทำงานระบบรับเก็บความจำที่ไม่ใช้แล้ว ทุกอ็อบเจกต์ที่ถูกยกเลิกจะถูกทำลาย. ในทุกครั้งที่ฟังก์ชันปิดท้ายการทำงานโค้ดของตน ระบบรับเก็บความจำที่ไม่ใช้แล้วก็จะทำงาน ปล่อยความจำของตัวแปรท้องที่ และในบางสถานการณ์ที่ไม่น่าคาดคิด ระบบรับเก็บความจำที่ไม่ใช้แล้วก็จะทำงาน
把对象的所有引用都设置为 null,可以强制性地废除对象。例如:
var oObject = new Object; // do something with the object here oObject = null;
当变量 oObject 设置为 null 后,对第一个创建的对象的引用就不存在了。这意味着下次运行无用存储单元收集程序时,该对象将被销毁。
每用完一个对象后,就将其废除,来释放内存,这是个好习惯。这样还确保不再使用已经不能访问的对象,从而防止程序设计错误的出现。此外,旧的浏览器(如 IE/MAC)没有全面的无用存储单元收集程序,所以在卸载页面时,对象可能不能被正确销毁。废除对象和它的所有特性是确保内存使用正确的最好方法。
注意:废除对象的所有引用时要当心。如果一个对象有两个或更多引用,则要正确废除该对象,必须将其所有引用都设置为 null。
早绑定和晚绑定
所谓绑定(binding),即把对象的接口与对象实例结合在一起的方法。
早绑定(early binding)是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。在 Java 和 Visual Basic 这样的语言中,有了早绑定,就可以在开发环境中使用 IntelliSense(即给开发者提供对象中属性和方法列表的功能)。ECMAScript 不是强类型语言,所以不支持早绑定。
另一方面,晚绑定(late binding)指的是编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作,而无任何惩罚。