字面量的方式创建

问题:使用内置构造函数和字面量的方式来创建对象差不多,都存在以下问题:

  1. 创建的对象无法复用,复用性差。
  2. 如果需要创建多个同类型的对象,如(狗)则需要些大量重复代码,代码冗余度较高。
    var p1 = {
        name:'张三',
        run:function () {
            console.log(this.name + '跑');
        }
    };
    p1.run();
    
内置构造函数的方式来创造对象

问题:使用内置构造函数和字面量的方式来创建对象差不多,都存在以下问题:

  1. 创建的对象无法复用,复用性差
  2. 如果需要创建多个同类型的对象,如(狗)则需要些大量重复代码,代码冗余度较高。
    var p2 = new Object();
    p2.name = '李四';
    p2.run = function () {
        console.log(this.name + '跑');
    };
    p2.run()
    
简单工厂函数的方式来创建对象

简单工厂模式

工厂里面有一些产品的模板,只需要给工厂提供原材料,工厂按照固定的加工方式,就可以返回外界同一类型的产品
问题:无法判断类型

????自定义构造函数的方式来创建对象
  1. 自定义构造函数和简单工厂函数的对比
    ① 函数的首字母大写(用于区别构造函数和普通函数)
    ② 创建对象的过程是由new关键字实现
    ③ 在构造函数内部会自动的创建新对象,并赋值给this指针
    ④ 自动返回创建出来的对象

    function Person(name,age,sex){
        // 1. 自动创建空对象,把对象地址给了this,this → 新对象
        //  var this = new Object();
    
        // 2. this 给空对象绑定属性和行为
        this.name = name;
        this.age = age;
        this.sex = sex;
        
        // 3. 返回this
        return this;
    }
    
    var p = new Person();
    
  2. 构造函数的执行过程
    ① 自动创建空对象,把对象地址给了this,this指向 新对象
    ② this 给空对象绑定属性和行为
    ③ 返回this

  3. 构造函数的返回值说明.
    ① 如果在构造函数中没有显示的return,则默认返回的是新创建出来的对象
    ② 如果在构造函数中有显示的return,则依照具体的情况出题。

    1. 如果不写,直接返回默认创建的新对象
    2. return的是this,直接返回默认创建的新对象
    3. return的是null或基本数据类型,则返回新创建的对象。
    4. return的是对象,则直接返回该对象,取而代之本该默认返回的新对象

    总结:类型匹配才接受 → 对象