面对对象

70 阅读1分钟

Symbol

/* Symbol独一无二的值 不可以new */

        let car = Symbol('car');
        let obj = {
            [car]:'bmw'
        }
        obj.car = 'audi'
        console.log(obj);
        console.log(obj[car]);

栈内存和堆内存

  /* 引用数据类型 会开辟一个内存(栈内存(内存的地址) 和 堆内存(内存的值) ) */
        let obj1 = {name:'zhangsan',age:20};
        let obj2 = {};

        /* obj1的栈内存的地址给了obj2 */
        obj2 = obj1;

        /* obj2 把obj1的堆内存的name值 由zhangsan 改成了 lili */
        obj2.name="lili"

        /* 所以 obj1 和 obj2 的值 都是一样的 其实都是obj1的堆内存的值 */
        console.log('obj1',obj1);
        console.log('obj2',obj2);

1

<!-- 构造函数的方式 -->
    <script>
        /* obj是Object new出来的一个实例化对象 */
        // let obj = new Object()
        // obj.name = 'taotao'
        // obj.age = 30
        // obj.kaiche = function (){
        //     document.write( `${obj.name}--年纪${obj.age} 会开车` );
        // }
        // obj.kaiche();

        let obj = {
            "name":"taotao",
            "age":30,
            "kaiche":function (){
                console.log('this',this);
                document.write( `${this.name}--年纪${this.age} 会开车` );
            }
        }
        /* this是谁调用就是谁的  */
        obj.kaiche()
        console.log(obj);
        /* 对象字面量 */
        /* 对象定义的一种简写形式 */
        /* 简化创建包含大量属性的对象的过程 */
        /* 在为函数传递大量可选参数时,可考虑使用对象字面量 */

2

<!-- 
        JS是一种基于对象的语言,和其它面向对象语言不同
        引用类型是一种数据结构,将数据和功能组织在一起,常被称为类
     -->
     <script>
        /* 基于Object的方式创建对象 */
        /* Object 类 */
        /* obj 实例化出来的对象 */
        //  let obj = new Object();
        //  obj.name = '涛涛';
        //  obj.age = '30';
        //  obj.playGame = function (){
        //     document.write('我nba2k 超级溜');
        //  }
        //  document.write(obj.name + '<br>');
        //  document.write(obj.age + '<br>');
        //  obj.playGame();

        /* 对象字面量 */
        /* 对象字面量
        对象定义的一种简写形式
        简化创建包含大量属性的对象的过程
        在为函数传递大量可选参数时,可考虑使用对象字面量 */

工场模式

<script src="gongc.js"></script>
    <script>
        /**
         * @param name String 姓名
         * @param age Number 年纪
         * @param job String 职业
         * @param address String 住址
         * @方法 intro 可以打印出人物的信息
         * */
        let person1 = getPerson('张三',30,'工人','南京市江宁区')
        // console.log(person1.name);
        // console.log(person1.age);
        // console.log(person1.job);
        // console.log(person1.address);
        person1.intro();

        let person2 = getPerson('涛涛',40,'纺织工人','南京市秦淮区')
        person2.intro();

        let person3 = getPerson('涛涛2',40,'纺织工人','南京市秦淮区')
        person3.intro();

        console.log( person3.getTime() )

        /* 软件工程领域的一种设计模式 */
        /* 抽象了创建对象的过程 */
        /* 通过函数封装创建对象的细节 */

        /* 工厂模式的缺点 */
        /* 看不出类型(比如是时间对象 会具有时间对象的属性和方法)--解决:构造函数 */
        /* 函数重复、浪费资源(消耗内存)--解决:原型 */