21-对象

对象是一组无序的相关属性和方法的集合,所有的事物都是对象,万物皆对象

一、创建对象的三种方式

对象的属性以键值对存在。
对象的方法是一个函数

1.利用对象字面量创建对象

var obj = {
    name : '小艾同学',
    age : 23,
    sex : '女',
    flag : function(){
        alert('冲冲冲!~');
    }
};

2.通过object创建函数

var obj = new Object();
obj.name = '小艾同学';
obj.age = 23;
obj.sex : '女';

3.构造函数创建对象

  1. 构造函数约定首字母大写

  2. 函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。

  3. 构造函数中不需要 return 返回结果

  4. 当我们创建对象的时候,必须用 new 来调用构造函数

function 构造函数名(形参1,形参2,形参3) {
     this.属性名1 = 参数1;
     this.属性名2 = 参数2;
     this.属性名3 = 参数3;
     this.方法名 = 函数体;
}
//调用
var obj = new 构造函数名(实参1,实参2,实参3)
  <script>
    function Person(uName, uSex, uScore) {
      this.name = uName;
      this.sex = uSex;
      this.score = uScore;
      this.do = function (x) {
        console.log(x);
      }
    }

    let my = new Person('小艾', '女', '100');
    let he = new Person('小柴', '男', '1000');
    console.log(my);
    console.log(he);
    my.do('敲代码')
    he.do('教我敲代码')
    console.log(my.name);
    console.log(he.name);
  </script>

new

  1. 在构造函数代码开始执行之前,创建一个空对象;(new和构造函数生了个孩子)
  2. 修改this的指向,把this指向创建出来的空对象;(this指向生的孩子)
  3. 给空对象添加属性和方法;(给孩子传递知识供他成长)
  4. 在函数完成之后,返回this---即创建出来的对象(孩子长大了,就回报父母)

二、对象中的增删改查

    • 对象名.属性名 = 值
    • 属性名要是一个原对象里没有的属性
    • delete 对象.属性名
    • 对象名.属性名 = 新值
    • 对象名.属性名
  • 上述方法中,能用点语法的就能用中括号语法
    • .语法不能解析变量
    • []可以
  • 对象名['属性名'] = 属性值;
    • 属性名一定要加引号,不然会被当成变量去解析
    var obj = {
      name: '小艾同学',
      age: 23,
      sex: '女'
    };

    var sex = 'age';
    console.log(obj.sex); // 女 => 不会解析变量 直接去找 sex这个属性
    console.log(obj['sex']); // 女 => 不会解析变量 直接去找 sex这个属性
    console.log(obj[sex]); // 23 => 会将sex当做变量去解析 会获取sex里面的age

三、遍历对象

  <script>
    function My(name, age, sex) {
      this.name = name;
      this.age = age;
      this.sex = sex;
    }

    var a = new My('小艾同学', 23, '女');

    for (var k in a) {
      console.log(k, a[k]);
      console.log(`键名:${k},键值:${a[k]}`)
    }
  </script>

四、复杂类型的复制操作

复制的是地址值,一变都变

    function Person(name, age) {
      this.name = name;
      this.age = age;
    }

    // 通过new得到的对象都是一个新对象
    var p1 = new Person('zs', 18);
    var p2 = new Person('zs', 18);

    p1.name = 'ls';
    console.log(p2.name); // zs
    p2 = p1;
    console.log(p2.name); // ls
    function Person(name, age) {
      this.name = name;
      this.age = age;
    }

    function f1(p) {
      p.name = 'ls';
      console.log(p.name); // ls
    }

    var p1 = new Person('zs', 18);

    console.log(p1.name); // zs
    f1(p1);
    console.log(p1.name); // ls

五、对象的传参

posted @ 2020-04-28 19:59  小艾同学喔  阅读(158)  评论(0编辑  收藏  举报