CH13_JS对象

第13章:Javascript对象

本章目标

  1. 掌握什么是对象?
  2. 掌握Javascript中创建对象的方式
  3. 对象的使用
  4. 值类型和引用类型

课程回顾

  1. 如何声明函数?
  2. 如何调用函数?
  3. 函数的返回值用什么关键字?
  4. 常用的系统函数有那些?

讲解内容

1. 对象理解

  1. 为什么要使用对象?

    思考:用函数实现,将学生的信息通过控制台输出,信息包含(学号,姓名,年龄,性别,班级…)

    代码实现:

    function showInfo(studentNo,name,age,sex,className,.....){
        console.log("学号:"+studentNo);
        .......
    }
    

    问题:当参数比较多的情况下,代码可读性太差,而且方法变很复杂,有没有简单的方式呢?

    function showInfo(student){
        console.log(student.studentNo);
        console.log(student.name);
        .............
    }
    

    说明:student则是一个对象,可以通过对象简化方法的参数。

  2. 什么是对象

    1. 现实生活中的对象

      万物皆对象,对象是一个具体的事物,一个具体的事物就会有行为和特征。

      比如:一个学生,一个老师,一辆车,一台电脑等都是对象

      注意:学生不是对象,是一类事务,在其他面向对象编程语言中,称为类,Javascript中没有类的概念(ES6就有类),但是具体到一个学生,则为对象,比如“张三”,“李四”

    2. Javascript中的对象

      对象是JavaScript的引用数据类型。对象是一种复合值:它将很多值(原始值或者其他对象)聚合在一起,可通过名字访问这些值。对象也可看做是属性的无序集合,每个属性都是一个名/值对。属性名是字符串,因此我们可以把对象看成是从字符串到值得映射。然而,对象不仅仅是字符串到值的映射,除了可以保持自有属性,JavaScript对象还可以从一个称为原型的对象继承属性。对象的方法通常是继承的属性。这种“原型式继承”(prototypal inheritance)是JavaScript的核心特征。

    3. 对象的组成

      1. 静态特征,称:属性

        属性都是,一个名对一个具体值,且无序集合。

      2. 动态特征,称:行为,则为“函数”或“方法”

        则为函数,或称为“方法”

2. 对象的创建

  1. 字面量方式

     var student={
                studentNo:"1001",
                name:"张三",
                age:20,
                sex:"男",
                sayHi:function(){
                    console.log(this.studentNo+","+this.name+","+this.age+","+this.sex);
                }
           };
    //调用对象的方法
    student.sayHi();
    //也可以重新给对象的属性赋值
    student.name="李四";
    student.sayHi();
    

    在这里插入图片描述

    注意事项:

    1. 属性和值用:分开,属性和属性之间用,隔开

    2. 方法是用函数关键字function声明

    3. 缺点:代码太过冗余,重复性太高

      比如要创建一个李四的学生对象,则要重新创建,所以重复性太高了。

  2. new Object()方式创建对象

     		var student=new Object();
            student.studentNo=1001;
            student.name="张三";
            student.age=20;
            student.sex="男";
            student.sayHi=function(){
                console.log(this.studentNo+","+this.name+","+this.age+","+this.sex);
            }
    
            student.sayHi();//调用方法
    		student.studentNo=1002;//重新赋值
            student.name="小丽";
            student.sayHi();
    

    注意事项:

    1. 通过对象.属性名=值,方式进行赋值,.符号相当于对象的属性,=是赋值
    2. 缺点:代码太过冗余,重复性太高,且每次创建对象都要使用new Object()方式
  3. 工厂函数创建对象

    function createStudent(studentNo,name,sex,age){
                //创建对象
                var student=new Object();
                //给对象属性赋值
                student.studentNo=studentNo;
                student.name=name;
                student.sex=sex;
                student.age=age;
                //实现对象的函数
                student.sayHi=function(){
                    console.log(this.studentNo+","+this.name+","+this.age+","+this.sex);
                }
    
                return student;//返回对象
            }
    
            var zs=createStudent(1001,"张三","男",20);//创建一个张三的对象
            zs.sayHi();
    
            var ls=createStudent(1002,"李四","男",19);//创建一个李四的对象
            ls.sayHi();
    

    注意事项:

    1. 相比前两种方式,此方式解决创建对象代码冗余的问题
    2. 缺点:过工厂模式我们解决了创建多个相似对象代码冗余的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)。

    在这里插入图片描述

  4. 自定义构造函数

    function Student(studentNo,name,age){
                this.studentNo=studentNo;
                this.name=name;
                this.age=age;
    
                this.sayHi=function(){
                    console.log(this.studentNo+","+this.name+","+this.age);
                }
            }
    
            var zs=new Student(1001,"张三",18);
            zs.sayHi();
            var ls=new Student(1002,"李四",20);
            ls.sayHi();
    

    注意事项:

    1. 此方式类似于创建函数,代码比较精简

3. 名词解释

  1. 属性和方法

    如果一个变量属于一个对象所有,那么该变量就可以称之为该对象的一个属性,属性一般是名词,用来描述事物的特征

    如果一个函数属于一个对象所有,那么该函数就可以称之为该对象的一个方法,方法是动词,描述事物的行为和功能

  2. new关键字

    构造函数 ,是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

    1. 构造函数用于创建一类对象,首字母要大写。

    2. 构造函数要和new一起使用才有意义。

    new在执行时会做四件事情

    1. new会在内存中创建一个新的空对象

    2. new 会让this指向这个新的对象

    3. 执行构造函数 目的:给这个新对象加属性和方法

    4. new会返回这个新对象

  3. this关键字

    JavaScript中的this指向问题,有时候会让人难以捉摸,随着学习的深入,我们可以逐渐了解

    现在我们需要掌握函数内部的this几个特点

    1. 函数在定义的时候this是不确定的,只有在调用的时候才可以确定

    2. 一般函数直接执行,内部this指向全局window

    3. 函数作为一个对象的方法,被该对象所调用,那么this指向的是该对象

    4. 构造函数中的this其实是一个隐式对象,类似一个初始化的模型,所有方法和属性都挂载到了这个隐式对象身上,后续通过new关键字来调用,从而实现实例化

4. 对象的使用

  1. 遍历对象的属性

    通过for…in语法可以遍历一个对象,语法:

    for(var key in 对象){
        console.log(key);//获取对象的具体属性
        console.log(对象[key]);//获取对象的属性值
    }
    

    案例:

    var student={
                studentNo:"1001",
                name:"张三",
                age:20,
                sex:"男",
                sayHi:function(){
                    console.log(this.studentNo+","+this.name+","+this.age+","+this.sex);
                }
           };
    
          for(var key in student){
              console.log(key+"-"+student[key]);
          }
    

    在这里插入图片描述

  2. 删除对象的属性

    语法:delete 对象.属性

    在这里插入图片描述

  3. 类型分类

    基本类型又叫做值类型,复杂类型又叫做引用类型

    ​ 值类型:简单数据类型,基本数据类型,在存储时,变量中存储的是值本身,因此叫做值类型。

    ​ 引用类型:复杂数据类型,在存储是,变量中存储的仅仅是地址(引用),因此叫做引用数据类型。

    堆栈空间分配区别:

    ​ 1、栈(操作系统): 由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;

    ​ 2、堆(操作系统): 存储复杂类型(对象),一般由程序员分配释放, 若程序员不释放,由垃圾回收机制回收,分配方式倒是类似于链表。

    注意:JavaScript中没有堆和栈的概念,在高级编程语言中的概念,此处我们用堆和栈来讲解。

  4. 类型详细讲解

    1. 基本数据类型:变量中存储的是具体的值,则操作时是操作值的副本

      1. 基本类型赋值方式

      在这里插入图片描述

      1. 基本类型传参数方式

        在这里插入图片描述

    2. 引用类型:变量中存储的是内存地址,则操作时操作的是地址

      1. 引用类型赋值

        在这里插入图片描述

      2. 引用类型传参

      在这里插入图片描述

    3. 案例演示:

      1. 值类型赋值方式,张三去年身高160,李四和张三身高一样,今年张三身高170,问题:李四今年身高多少?

        在这里插入图片描述

        在这里插入图片描述

      2. 引用类型赋值方式:以上同例,用对象实现

        在这里插入图片描述

        在这里插入图片描述

课后作业

. 案例演示:

  1. 值类型赋值方式,张三去年身高160,李四和张三身高一样,今年张三身高170,问题:李四今年身高多少?

     [外链图片转存中...(img-5v1iMtXo-1720755421838)]

     [外链图片转存中...(img-dHaW8c2W-1720755421838)]

  2. 引用类型赋值方式:以上同例,用对象实现

     [外链图片转存中...(img-zOUWebsZ-1720755421839)]

     [外链图片转存中...(img-9SobwIrt-1720755421839)]

课后作业

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

功夫熊猫大侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值