q第3章 对象(Objects)

3.1 对象字面量 Objects Literals

一个对象字面量就是包围在一对花括号中的零或多个"名/值"对。


3.2 检索 Retrieval

检索对象中包含的值:

stooge["first-name"]    //"Joe"
stooge.departure.IATA    //"SYD"
  • 检索不存在的成员元素的值返回undefined。
  • ||运算符可以用来填充默认值:
var middle = stooge["middle-name"] || "(none)" ;
var status = stooge.status || "unknown" ;
  • 尝试检索一个undefined值将会导致TypeError异常,这可以通过&&运算符来避免错误。
stooge.equipment                                                  //undefined
stooge.equipment.model                                       //throw "TypeError"
stooge.equipment && stooge.equipment.model                  //undefined

3.5 原型 Prototype

和原型链有关,稍后再记


3.6 反射 Reflection

反射:指可处理未知的对象并获得它们的属性和方法。
typeof操作符对确定属性的类型很有帮助,但是原型链中的属性也会产生一个值,为了处理这些不必要的属性,有两个办法:

  • 让程序检查并剔除函数值
  • 使用hasOwnProperty方法,它不会检查原型链,如果对象有独立属性,返回true
stooge.hasOwnProperty('first-name')          //true
stooge.hasOwnProperty('middle-name')      //false

3.7 枚举 Enumeration

for in语句可用来遍历一个对象中的所有属性名,包括原型链中的属性。
最常用的过滤器是hasOwnProperty方法,以及使用typeof来排除函数。

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


3.8 删除 Delete

delete运算符可以用来删除对象的属性,且不会触及原型链中的属性,但是可能会让原型链中的属性浮现出来:

another_stooge.nickname            //'Moe'
delete another_stooge.nickname;
//原型链中的nickname属性浮现
another_stooge.nickname         //'Curly'

3.9 减少全局变量污染 Global Abatement

全局变量削弱了程序的灵活性,所以应该避免。

  • 最小化使用全局变量的一个方法是只定义一个全局变量,这个全局变量此时变成了应用的容器
  • 使用闭包也可有效减少全局污染

你可能感兴趣的:(q第3章 对象(Objects))