第三章 对象
- Js包含一种原型链的特性,允许对象继承另一个对象的属性。正确的使用它能减少对象初始化时消耗的时间和内存。
检索
- 检索对象里包含的值时,可以采用在[]后缀中括住一个字符串表达式的方式。如果字符串表达式是一个字符串字面量,且它是一个合法的js标识符而且不是保留字,那么也可以用 . 表示法代替。优先使用 . 表示法,因为它更紧凑,且可读性更好。
- || 符号可以用于填充对象属性的默认值:
let status = flight.status || 'unknown'
引用
- 对象通过引用来传递。它们永远不会被复制:
var stooge = {
"first-name": "Jerome",
"last-name": "Howard",
};
var x = stooge;
x.nickname = 'curly';
var nick = stooge.nickName;
// 因为 x 和 nick指向同一个对象的引用,所以nick为 'curly'。
var a = {}, b = {}, c ={};
// a, b, c都引用一个不同的空对象
a = b = c = {}
// a, b, c 都引用同一个空对象
原型
- 原型连接只有在检索值的时候才会被用到。
枚举
- 使用 for in 遍历对象时,对象的属性名出现的顺序是不确定的,如果想要确保属性以特定的顺序出现,最好的办法就是避免使用 for in语句,创建一个数组,在其中以你需要的顺序包含属性名,并且使用for循环对该数组进行遍历。
删除
- delete运算符可以用来删除对象的属性。如果对象包含该属性,那么该属性就会被移除,它不会触及原型链中的任何对象。
- 删除对象的属性可能会让来自原型链中的属性透现出来:
another_stooge.nickName // 'Moe'
// 删除 another_stooge 的 nickName 属性,从而暴露出原型的 nickName 属性。
delete another_stooge.nickName;
another_stooge.nickName // 'Curly' another_stooge所继承的对象的 nickName 属性值为 'Curly'
减少全局变量污染
- js可以很随意地定义全局变量来容纳你的应用的资源。遗憾的是,全局变量削弱了程序的灵活性,应该避免使用。
- 最小化使用全局变量的方法之一是你的应用只创建一个唯一的全局变量:
var TETS = {};
该变量此时变成了你的应用的容器:
TEST.stooge = {
'first-name': 'Joe',
'last-name': 'Howard'
}
TEST.flight = {
airline: 'Oceanic',
number: 665
}
-
只要把全局性的资源都容纳入一个名称空间下,你的程序与其他应用程序、组件或者类库之间发生冲突的可能性就会显著降低。你的程序也会变得更容易阅读,因为很明显,TEST.stooge指向的是顶层结构。
-
使用闭包来进行信息隐藏是另一种有效减少全局污染的方法。