首页 > 代码库 > 《JavaScript语言精粹》—— 对象篇

《JavaScript语言精粹》—— 对象篇

二、对象

(1) 对象字面量

对象字面量提供了一种非常方便地创建新对象值得表示法。对象字面量出现在任何允许表达式出现的地方。

(2) 检索

要检索对象里的值,可以采用[]后缀括住一个字符串表达式的方式。如果字符串是一个字符串字面量,且是一个合法的JavaScript标识符且不是保留字,那么也可以使用.来访问。优先考虑.,以内它紧凑且可读性好。

① 如果你尝试检索一个不存在的值,那么返回undefined。

② ||运算符可以用来填充默认值。

var middle = stooge[‘middle_name‘] || ‘unknown‘;

③ 尝试从undefined的成员属性中取值将会导致TypeError错误。这是可以用&&来避免错误。

flight.equipment // undefined
flight.equipment.model // throw "TypeError"
flight.equipment && flight.equipment.model  // undefined

(3) 更新

对象里的值可以通过赋值语句来更新。如果属性名已经存在于对象里,那么这个属性将会被替换掉。

(4) 引用

对象通过引用来传递。它们永远不会被复制。

(5) 原型

每个对象都连接到一个原型对象,并且可以从中继承属性。所有通过对象字面量创建的对象都会连接到Object.prototype,它是JavaScript中的标配对象。

① 原型连接在更新时是不起作用的。当我们对某个对象做出改变时,不会触及该对象的原型。

② 原型连接只有在检索值得时候才会被用到。如果我们尝试去获取某个属性值,但该对象没有此属性名,那么JavaScript会试着从原型对象中获取属性值。如果那个原型对象也没有该属性值,在从它的的原型中寻找,直到最后的终点Object.prototype。如果想要的属性还不存在,那么结果就是undefined。这个过程叫做委托。

③ 原型关系是一种动态关系。如果我们添加一个新的属性到原型中,该属性会立即对所有基于该原型创建的对象可见。

(6) 反射

其中一个方法是使用hasOwnProperty方法,如果对象拥有独有的属性,它将返回true。这个方法不会检查原型链。

(7) 枚举

for-in语句可以用来遍历一个对象中的所有属性名。该枚举过程会将列出所有属性——包括函数和你可能不关心的原型中的属性,所有有必要过滤。一般采用hasOwnProperty方法和typeof来处理。

var name;
for ( name in anthor_stooge ) {
    if ( typeof anthor_stooge[name] !== ‘function‘ ) {
        document.writeln(name + ‘:‘ + anthor_stooge[name]);
    }
}

属性名出现的顺序不是确定的,因此要对任何可能出现的顺序有所准备。如果你想确保顺序特定,那么使用数组是最好的选择。

(8) 删除

delete运算符可以用来删除对象的属性。如果对象包含该属性,那么该属性就会被删除,但是它不会触及原型链中的任何对象。

(9) 减少全局变量

最小化全局变量的方法之一就是为你的应用创建一个唯一的全局变量。

 

《JavaScript语言精粹》—— 对象篇