一. 对象的基本概念

ECMA-262 把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”

严格来讲,这就相当于说对象是一组没有特定顺序的值。

对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。

正因为这样(以及其他将要讨论的原因),我们可以把ECMAScript 的对象想象成散列表:

  • 无非就是一组名值对,其中值可以是数据或函数。
<script type="text/javascript">
      //用大括号括起来的一系列的键值对,就构成了JavaScript对象。这种对象称之为对象字面量。
    var person = {
        name : "张三",    // 一个键值对  
        age : 20,
        sex : "男",
        eat : function () {    //属性的值是函数,这个时候我们更喜欢把这样的属性称之为方法。
            alert("吃东西");
        }
    }
</script>

说明:

  1. name : "张三" 一个键值对表示JavaScript对象的一个属性。 name是属性名, "张三" 属性值。

  2. 属性可以是任意类型的。可以包括我们以前学的简单数据类型,也可以是函数,也可以是其他的对象。

  3. 当一个属性的值是函数的时候,我们更喜欢说这个属性为方法。(如果函数不和对象关联起来的时候,应该叫函数不应该叫方法。只是一种称呼,你完全可以不用理会)。 我们一般说person对象具有了一个方法eat. 将来访问eat的时候,也和调用一个函数一样一样的, 只是需要通过person.eat()来调用而已.


二. 访问对象的属性

访问一个对象的属性,我们可以直接通过 对象.属性名对象[属性名] 来访问。

alert(person.name);  // 访问person对象的 name属性值
person.age = 30;  //修改person对象的 age 属性
person.eat();  //既然是调用方法(函数) 则一定还要添加 ()来表示方法的调用
alert(person["name"]);  //

两种使用方式有一些不同的地方:

  1. 对象.属性名的方式,

    只适合知道了属性的名字,可以直接写。比如: person.age 。如果属性名是个变量,则这种方法无效

  2. 对象[属性名],这种方式使用无限制。如果是字符串常量,则应该用""''引起来,如果是变量,可以直接使用。

    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]);
}

Copyright © 李振超 2018 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-10-18 03:19:29

results matching ""

    No results matching ""