【www.gdgbn.com--php应用】

网页特效对象详细应用实例

1. 当尝试检索对象的一个并不存在的成员元素的值,将返回一个undefined值。可以通过“||”运算符来填充默认值:

stooge["middle-name"] //undefined
var middle = stooge["middle-name"] || "tom";

2. 当尝试检索一个undefined值将会导致typeerror异常。可以通过“&&”运算符来避免错误:

flight.equipment  //undefined
flight.equipment.model //throw "typeerror"
flight.equipment && flight.equipment.model //undefined
3. 对象通过引用来传递。他们永远不会被拷贝

if (typeof object.beget !== "function")
{
    object.beget = function (o)
    {
        var f = function () {};
        f.prototype = o;
        return new f();
    }
}

var another_stooge = object.beget(stooge);

a. 原型连接在更新时是不起作用的
当我们对某个对象作出改变时,不会触及到该对象的原型。
b. 原型连接只有在检索值的时候才被用到
如果尝试去获取对象的某个属性值,且该对象没有此属性名,那么从它的圆形对象中获取属性值。 (如果那个原型对象也没有该属性值,那么再从它的原型中寻找,依次类推,知道该过程左后的重点object.prototype。如果想要的属性完全不存在于原型链中,那么结果就是undefined值。这个过程称为委托)
c. 原型关系是一种动态关系。
如果我们添加一个新的属性到原型中,该属性会立即对所有基于该原形创建的对象可见。

5. 反射
在一些时候下,我们需要能够在对对象完全不了解的情况下进行处理,并且在处理之前发现他们的属性和方法,这个过程称作反射(reflection)。
在判断对象是否有某一属性时,可以使用”hasownproperty“方法,如果对象拥有独有的属性,它将返回true。
注:hasownproperty方法不会检查原型链。

6. 枚举
for in 语句可以用来遍历一个对象中的所有属性名。
属性名出现的顺序是不确定的,因此要对任何可能出现的顺序有所准备。如果你想要确保属性以特定的顺序出现,最好的办法就是完全避免使用for in语句,而是创建一个数组,在其中以正确的顺序包含属性名

//使用for in语句:
 var name;
 for (name in another_stooge)
 {
  if(typeof another_stooge[name] !== "function")
  {
   document.writeln(name + ": " + another_stooge[name]);
  }
 }

//使用for语句
 var i;
 var properties = [
  "first-name",
  "middle-name",
  "last-name",
  "profession"
 ]
 for (i=0; i  {
  document.writeln(properties[i] + ": " +
     another_stooge[properties[i]]);
 }

本文来源:http://www.gdgbn.com/jiaocheng/29995/