面向对象

82 阅读1分钟

1.基础知识

基本数据类型 number string boolean null undefined Symbol
引用数据类型 object(Function Array RegExp)

Symbol

es6 新增了一个基本数据类型Symbol,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。

    <script>
        let car=Symbol('car');
        let obj={
            [car]:'bwm'
        }
        obj.car="audi";
        console.log(obj);
        console.log(obj.car);
        console.log(obj[car]);
    </script>
复制代码

image.png

2.栈内存与堆内存

    <script>
        /* 引用数据类型 会开辟一个内存【栈内存(内存的地址) 和 堆内存(内存的值)】 */
        let obj1 = {name:'leo',age:20};
        let obj2 = {};
        
        /* obj1的栈内存的地址给了obj2 */
        obj2 = obj1;
        
        /* obj2 把obj1的堆内存的name值 由leo 改成了 lily */
        obj2.name="lily"

        /* 所以 obj1 和 obj2 的值是一样的,都是obj1的堆内存的值 */
        console.log('obj1',obj1);
        console.log('obj2',obj2);
    </script>
复制代码

3.const

    <script>
        /* 定义常量 不能给常量重复地赋值 */
        const url = 'http://timemeetyou.com:8889/api/private/v1/';
        /* url = 'http://www.baidu.com' */ /* 会报错 */

        /* 定义对象 引用数据类型 会开辟一个堆内存 内存地址不会变化*/
        /* 地址不会被改变 也就不会报错 */
        const obj = {
            name:"zhangsan"
        }
        obj.name = 'lili'
        obj.age = 20
        console.log(obj);   
        
        /* 改变obj的内存地址会报错
        let obj2 = {};
        obj = obj2;  */  
    </script>
复制代码

4.工厂模式

软件工程领域的一种设计模式, 抽象了创建对象的过程, 通过函数封装创建对象的细节。
🍎工厂模式的缺点:
看不出类型(比如是时间对象 会具有时间对象的属性和方法)--解决:构造函数
函数重复、浪费资源(消耗内存)--解决:原型

    <script>
        function getPerson(name, age, job, address) {
            let person = new Object();
            person.name = name
            person.age = age
            person.job = job
            person.address = address
            person.intro = function () {
                document.write(
                    `<p>姓名:${this.name}</p>
                     <p>年龄:${this.age}</p>
                     <p>职业:${this.job}</p>
                     <p>住址:${this.address}</p> `
                )
            }
            return person
        }
        let person1 = getPerson('lily', 20, '工人', '南京');
        person1.intro()
    </script>
复制代码

5.构造函数

系统提供的构造函数:String Number Boolean Object RegExp Date Array
构造函数一般以大写字母开头。
构造函数也是函数,只不过可以用来创建对象。
🍎与工厂模式对比:
没有显式创建对象
直接将属性和方法赋给了this对象
没有return\

    <script>
        function Person(){
            this.name = '张三'
            this.fn = function (){
                document.write(this.name)
            }
        }
        /* new 先创造了一个是实例化对象 并且把this给了实例化对象per1 */
        /* 也就是把属性和方法给了per1 */
        let per1 = new Person();
        console.log(per1);
    </script>