网页特效对象详细应用实例
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<properties.length; i +=1)
{
document.writeln(properties[i] + ': ' +
another_stooge[properties[i]]);
}