初始面向对象

77 阅读2分钟

创建对象的方式

1.字面量的方式

    let obj = {
            name: '张三',
            age: 18
        }
    console.log(obj) // {name: '张三', age: 18}

2.内置构造函数的方式

    let obj = new Object()
    obj.name = '张三'
    obj.age = '13'
    console.log(obj) //{name: '张三', age: '13'}

3.工厂函数

       function createObj (name, age) {
            // 3.1 手动创建一个对象
            const obj = {}

            // 3.2 手动向对象内部添加一些属性
            obj.name = name
            obj.age = age

            // 3.3  手动返回一个对象
            return obj
        }

        const res1 = createObj('QF001', 18)
        console.log(res1) //{name: 'QF001', age: 18}

        const res2 = createObj('QF002', 28)
        console.log(res2) //{name: 'QF002', age: 28}

4.自定义构造函数

    /**
         *  自定义构造函数的书写
         * 
         *      1. 构造函数的函数名 建议首字母大写 (为了和普通函数做一个区分)
         *      2. 构造函数将来在调用的时候, 必须和 new 关键字 一起使用 (必须这样写)
         *      3. 构造函数内部不需要书写 return
         *              如果 手动返回了 基本数据类型, 那么写了和没写一样
         *              如果 手动返回了 引用数据类型, 那么写了之后构造函数失效
         *      4. 构造函数在使用的时候 内部 的 this 规则和之前的函数不太一样 
                   (重点!!!)
         *              因为一个函数要想当成构造函数去使用, 那么必须要和 new 关键字一起使用
         *              如果一个函数和 new 关键字一起使用, 那么内部的 this 就指向函数中被
                        创建出来的对象
         * 
         *              构造函数内部的 this 指向于 函数内部自动创建出来的那个对象
         * 
         *      5. 构造函数不能使用箭头函数, 因为箭头函数内部没有 this
        */
        
        
        function Person () {
            this.name = 'QF001'
            this.abc = 10086
        }

        const res = new Person()
        console.log(res) //Person {name: 'QF001', abc: 10086}