JavaScript中的对象
面向对象(Object-Oriented,OO)的语言有一个标志,那就是他们都没有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。
ECMA-262把对象定义为:“无序属性的集合,其属性可以包括基本值、对象或者函数”
创建自定义对象的最简单方式就是创建一个Object的实例,然后再为它添加属性和方法。如下:
var person=new object();
person.name="xiaoming";
person.age=29;
person.job="Software Engineer";
person.sayName=function(){
alert(this.name);
}
上面的例子中创建了一个名为person的对象,并为它吸纳三个属性(name、age和job)和一个方法(sayName())。sayName()方法用于显示this.name的值。早期的JavaScript的开发人员经常使用这个模式创建新对象。几年后,对象字面量成为创建对象的首选模式,如下:
var person={
name"xiaoming:",
age:29,
job:"SoftwareEngineer",
sayName:function(){
alert(this.name);
}
}
//JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成。//
JavaScript的对象用于描述现实世界中的某个对象。
JavaScript用一个{...}表示一个对象,键值对以xxx: xxx形式申明,用,隔开。注意,最后一个键值对不需要在末尾加,,如果加了,有的浏览器(如低版本的IE)将报错。
实际上JavaScript对象的所有属性都是字符串,不过属性对应的值可以是任意数据类型。
如果访问一个不存在的属性会返回什么呢?JavaScript规定,访问不存在的属性不报错,而是返回undefined:
由于JavaScript的对象是动态类型,你可以自由地给一个对象添加或删除属性:
var xiaoming = { name:'小明'};
xiaoming.age;// undefined
xiaoming.age =18;// 新增一个age属性
xiaoming.age;// 18
deletexiaoming.age;// 删除age属性
xiaoming.age;// undefineddelete
xiaoming['name'];// 删除name属性
xiaoming.name;// undefined
deletexiaoming.school;// 删除一个不存在的school属性也不会报错
如果我们要检测xiaoming是否拥有某一属性,可以用in操作符:
'name'inxiaoming;//true
'grade'inxiaoming;//false
in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的:
'toString'inxiaoming;//true
因为toString定义在object对象中,而所有对象最终都会在原型链上指向object,所以xiaoming也拥有toString属性。
要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法:
var xiaoming = {name:'小明'};xiaoming.hasOwnProperty('name');//true
xiaoming.hasOwnProperty('toString');//false
无论该属性存在于实例中还是在原型中。同时使用hasOwnProperty()方法和in操作符,就可以确定该属性到底是存在于对象中,还是存在于原型中。