《JavaScript面向对象精要》——1.3 引用类型

    xiaoxiao2024-04-16  119

    本节书摘来自异步社区《JavaScript面向对象精要》一书中的第1章,第1.3节,作者:【美】Nicholas C. Zakas著,更多章节内容可以访问云栖社区“异步社区”公众号查看

    1.3 引用类型

    引用类型是指JavaScript中的对象,同时也是你在该语言中能找到的最接近类的东西。引用值是引用类型的实例,也是对象的同义词(本章后面将用对象指代引用值)。对象是属性的无序列表。属性包含键(始终是字符串)和值。如果一个属性的值是函数,它就被称为方法。JavaScript中函数其实是引用值,除了函数可以运行以外,一个包含数组的属性和一个包含函数的属性没有什么区别。

    当然,在使用对象前,你必须先创建它们。

    1.3.1 创建对象有时候,把JavaScript对象想象成图1-2中的哈希表可以帮助你更好地理解对象结构。

    JavaScript有好几种方法可以创建对象,或者说实例化对象。第一种是使用new操作符和构造函数。构造函数就是通过new操作符来创建对象的函数——任何函数都可以是构造函数。根据命名规范,JavaScript中的构造函数用首字母大写来跟非构造函数进行区分。例如下列代码实例化一个通用对象,并将它的引用保存在object中。

    var object = new Object();因为引用类型不在变量中直接保存对象,所以本例中的object变量实际上并不包含对象的实例,而是一个指向内存中实际对象所在位置的指针(或者说引用)。这是对象和原始值之间的一个基本差别,原始值是直接保存在变量中的。

    当你将一个对象赋值给变量时,实际是赋值给这个变量一个指针。这意味着,将一个变量赋值给另一个变量时,两个变量各获得了一份指针的拷贝,指向内存中的同一个对象。例如,

    var object1 = new Object(); var object2 = object1;

    这段代码先用new创建了一个对象并将其引用保存在object1中。然后将object1的值赋值给object2。两个变量都指向第一行被创建的那个对象实例,如图1-3所示。

    1.3.2 对象引用解除JavaScript语言有垃圾收集的功能,因此当你使用引用类型时无需担心内存分配。但最好在不使用对象时将其引用解除,让垃圾收集器对那块内存进行释放。解除引用的最佳手段是将对象变量置为null。

    var object1 = new Object(); // do something object1 = null;  // dereference

    这里,对象object1被创建然后使用,最后设置为null。当内存中的对象不再被引用后,垃圾收集器会把那块内存挪作它用(在那些使用几百万对象的巨型程序里,对象引用解除尤其重要)。

    1.3.3 添加删除属性在JavaScript中,对象另一个有趣的方面是你可以随时添加和删除其属性。例如,

    var object1 = new Object(); var object2 = object1; object1.myCustomProperty = "Awesome!"; console.log(object2.myCustomProperty);  // "Awesome!"

    这里,object1上增加了myCustomProperty属性,值为“Awesome!”。该属性也可以被object2访问,因为object1和object2指向同一个对象。

    注意:本例演示了JavaScript的一个独特的方面:可以随时修改对象,即使并没有在开始时定义它们。同时,你将会在本书后续内容中看到还存在很多方法阻止此类修改。除了通用对象引用类型以外,JavaScript还有其他一些内建类型任你使用。

    相关资源:亮剑.NET深入体验与实战精要2
    最新回复(0)