类和对象进阶

 值类型和引用类型

// 值类型:string,number,boolean

        let num1 = 100

        let num2 = num1  //num2的值由num1传入

        console.log(`num1=${num1},num2=${num2}`);

        num2 = 200   //num2的值重新修改后,num1不受影响

        console.log(`num1=${num1},num2=${num2}`);

        console.log('--------------------------------------');

        // 引用类型:数组,对象

        let obj1 = {

            name:'张杰',

            age:20,

            sex:'男'

        }

        // 将obj1传给obj2,其实传的是obj1的地址

        let obj2 = obj1

        console.log('obj1',obj1);

        console.log('obj2',obj2);

        console.log('------');

    //修改obj2的属性值,obj1也会发生变化,因为obj1和obj2的地址是一样的。

   // 值类型在调用方法传递是,传的是值

  //数组是引用类型

原型对象

  // 构造函数(类)有原型对象,其实就是构造函数身上的一个自带属性,这个属性是:prototype

        // 对象也有原型对象,其实就是对象身上的一个自带属性,这个属性是:__proto__

        // 所有同类型的对象身上的原型对象属性,都指向类的原型对象属性。

        // 类和对象的原型对象身上挂的方法,对象可以直接使用,不需要经过原型对象。

        function Student(name,age,sex){

            this.name = name

            this.age = age

            this.sex = sex

            // 如果将方法直接定义在类里面,将来根据这个类创建的每个对象,都要创建自己独立的这些方法

            // 如果要创建很多对象,对内存的开销会很大。

            /* this.sayHi = function(){

                console.log(`Hi!我叫${this.name},今年${this.age}岁,性别是${this.sex}`);

            }

            this.study = function(time){

                console.log(`Hi!我叫${this.name},我每天学习${time}小时`);

            }

            this.play = function(time){

                console.log(`Hi!我叫${this.name},我每天玩${time}小时`);

            } */

        }

        // 我们可以将类的方法,添加到类的原型对象身上

        Student.prototype.sayHi = function(){

            console.log(`Hi!我叫${this.name},今年${this.age}岁,性别是${this.sex}`);

        }

        Student.prototype.study = function(time){

            console.log(`Hi!我叫${this.name},我每天学习${time}小时`);

        }

        Student.prototype.play = function(time){

            console.log(`Hi!我叫${this.name},我每天玩${time}小时`);

        }

        let s1 = new Student('张三',20,'男')

        let s2 = new Student('李四',22,'女')

        let s3 = new Student('王五',24,'男')

        // 查了Student类的原型对象

        // console.log(Student.prototype);

        // 查看三个对象的原型对象 -- 你会发现,长得一样。

        // console.log(s1.__proto__);

        // console.log(s2.__proto__);

        // console.log(s3.__proto__);

        s1.sayHi()

        s1.study(8)

        s1.play(3)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一.值类型和引用类型 function upateNum(num2){ console.log...
    可能有猫饼阅读 285评论 0 0
  • 十二、类和对象进阶2 1.自执行方法 定义一个自执行函数,函数定义完成后,自己执行一次,函数名可以省略,因为没有任...
    默默_01cf阅读 205评论 0 0
  • 一,JavaScript的书写格式 1.行内脚本:写在HTML标签内部,通过一个属性节点来添加,不推荐使用,例如“...
    刘远舟阅读 587评论 0 0
  • 实例属性与实例方法 与绑定实例对象或者this绑定的属性或者方法,只能通过构造函数的实例对象进行获取或者调用 静态...
    慕小小小呀阅读 216评论 0 0
  • 对象就是拥有一组属性和方法的集合 如果 a.b ,那么a就是对象,b是a的属性 如果 a.c(),那么a就是对象,...
    kygo阅读 189评论 0 1

友情链接更多精彩内容