一. 对象的基本概念
ECMA-262
把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”
严格来讲,这就相当于说对象是一组没有特定顺序的值。
对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。
正因为这样(以及其他将要讨论的原因),我们可以把ECMAScript
的对象想象成散列表:
- 无非就是一组名值对,其中值可以是数据或函数。
<script type="text/javascript">
//用大括号括起来的一系列的键值对,就构成了JavaScript对象。这种对象称之为对象字面量。
var person = {
name : "张三", // 一个键值对
age : 20,
sex : "男",
eat : function () { //属性的值是函数,这个时候我们更喜欢把这样的属性称之为方法。
alert("吃东西");
}
}
</script>
说明:
name : "张三"
一个键值对表示JavaScript
对象的一个属性。name
是属性名,"张三"
属性值。属性可以是任意类型的。可以包括我们以前学的简单数据类型,也可以是函数,也可以是其他的对象。
当一个属性的值是函数的时候,我们更喜欢说这个属性为方法。(如果函数不和对象关联起来的时候,应该叫函数不应该叫方法。只是一种称呼,你完全可以不用理会)。 我们一般说
person
对象具有了一个方法eat
. 将来访问eat
的时候,也和调用一个函数一样一样的, 只是需要通过person.eat()
来调用而已.
二. 访问对象的属性
访问一个对象的属性,我们可以直接通过 对象.属性名 或 对象[属性名] 来访问。
alert(person.name); // 访问person对象的 name属性值
person.age = 30; //修改person对象的 age 属性
person.eat(); //既然是调用方法(函数) 则一定还要添加 ()来表示方法的调用
alert(person["name"]); //
两种使用方式有一些不同的地方:
对象.属性名的方式,
只适合知道了属性的名字,可以直接写。比如:
person.age
。如果属性名是个变量,则这种方法无效对象[属性名]
,这种方式使用无限制。如果是字符串常量,则应该用""
或''
引起来,如果是变量,可以直接使用。person.age = 100; // ok var n = "age"; person.a = 101; // no ok 语法错误 person["age"] = 102; // ok person[n] = 103; //ok
三. 给对象添加属性
JavaScript是一种动态语言,可以在代码执行过程中,动态去添加和修改对象的属性。这是与其他面向对象语言一个很大的不同点。
备注:对那些基于类的语言,属性一旦在类中定义完成,对象是不能去动态添加和删除属性的。
//给person对象的属性 girlFriend 赋值。在赋值的过程中,首先会判断这个属性在JavaScript中是否存在,如果存在就对这个
//属性重写赋值。如果不存在,就给这个对象添加这个属性,并赋值。
person.girlFrient = "小丽";
//给对象添加方法
person.play = funcion(){
alert("打击high起来");
}
四. 删除对象
对JavaScript来说,我们不仅可以动态的添加属性,也可以动态的删除属性。
使用操作符:delete
注意:
delete
是个操作符,不是方法,所以后面没有必要添加括号啊
// 使用delete操作关键字,删除person对象的属性age
delete person.age;
alert(person.age); //弹出undefined。表示这个属性没有定义
五. 修改对象属性
// 把person对象的sex属性的值修改为 女
person.sex = "女";
person.eat = funcion(){
alert("吃货");
}
person.eat(); //吃货
六. 遍历对象的属性
for...in
可以用来遍历对象的所有属性。
// 在用for...in遍历的时候, in前面的变量pn指的是属性的名称。
for (pn in person) {
alert(pn + " " + person[pn]);
}