开发者社区> 异步社区> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 因为引用类型不在变量中直接保存对象,所以本例中的object变量实际上并不包含对象的实例,而是一个指向内存中实际对象所在位置的指针(或者说引用)。这是对象和原始值之间的一个基本差别,原始值是直接保存在变量中的。
+关注继续查看

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

1.3 引用类型

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

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

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

screenshot

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

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

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

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

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

screenshot

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还有其他一些内建类型任你使用。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《JavaScript 面向对象精要》 阅读摘要(下)
高程面向对象这块内容介绍的比较浅显,个人觉得这本小书是高程的补充,看完之后觉得收获匪浅,所以做了个笔记,以备后询 Js中两种基本数据类型:原始类型(基本数据类型)和引用类型; 原始类型保存为简单数据值,引用类型则保存为对象,其本质是指向内存位置的应用。 其它编程语言用栈存储原始类型,用堆存储引用类型,而js则不同:它使用一个变量对象追踪变量的生存期。原始值被直接保存在变量对象里,而引用值则作为一个指针保存在变量对象内,该指针指向实际对象在内存中的存储位置。
38 0
《JavaScript 面向对象精要》 阅读摘要(上)
高程面向对象这块内容介绍的比较浅显,个人觉得这本小书是高程的补充,看完之后觉得收获匪浅,所以做了个笔记,以备后询 原始类型和引用类型Js中两种基本数据类型:原始类型(基本数据类型)和引用类型; 原始类型保存为简单数据值,引用类型则保存为对象,其本质是指向内存位置的应用。 其它编程语言用栈存储原始类型,用堆存储引用类型,而js则不同:它使用一个变量对象追踪变量的生存期。原始值被直接保存在变量对象里,而引用值则作为一个指针保存在变量对象内,该指针指向实际对象在内存中的存储位置。
50 0
《JavaScript面向对象精要》——导读
大多数开发者将面向对象的编程联想为那些在学校中学到的基于类的语言,比如C++和Java。在用这些语言完成任务之前,必须先创建类,哪怕只是写一个简单的命令行程序。目前业界常用的设计模式也强调了基于类的概念。
1381 0
《JavaScript面向对象精要》——导读
JavaScript拥有上述全部特性,因为语言本身没有类的概念,所以某些特性可能不是以你所期望的方式实现的。乍一看,一个JavaScript程序可能像是一个用C来编写的面向过程的程序。如果写一个函数并传递一些参数,就有了一个看上去没有对象也可工作的脚本。
1140 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Javascript异步编程
立即下载
JavaScript 语言在引擎级别的执行过程
立即下载
Javascript中的对象
立即下载