构造函数和工厂方法创建对象

为何使用工厂方法和构造函数

我们不可能使用字面量创建大量的对象,其中存在许多的重复代码,我们就需要一个工厂来批量生产相似对象。

工厂方法

工厂方法 使用工厂方法创建对象,使用的构造函数都是Object,所以创建对象都是Object这个类型,导致我们无法区分不同类型对象就是不知道从哪来的

构造函数

创建自定义对象,首字母大写,普通函数直接调用,构造函数用new关键字。

构造函数执行流程:

1.立刻创建一个新的对象;
2.在这个新对象内部[[Prototype]]特性被赋值为构造函数的prototype属性
3.构造函数内部的this被赋值为这个新的对象(即this指向这个新对象)。
4.执行构造函数内部的代码(给新对象添加属性).
5.如果构造函数返回非空对象,则返回该对象;否则,返回刚创建的新对象。

使用同一个构造函数创建对象为同一类对象,也将构造函数称为一个类,通过构造函数创建对象称为该类的实例

语法:对象 instanceof 类(构造函数) 判断该对象是否为类的实例。

所有对象都是Object的实例。

构造函数控制台赋值给变量的函数表达式也可以表示构造函数

<script>
    let Person = function (name,age,job) {
        this.name = name;
        this.age = age;
        this.job = job;
        this.sayName = function () {
          console.log(this.name);
        };
    };
    /**
     * 在实例化时,如果不想传参,那么构造函数后边的括号可加可不加。
     * 只要有new操作符,就可以调用相应的构造函数
     */
    let person1 = new Person("Tang",21,"Software Engineer");
    let person2 = new Person;

    console.log(person2 instanceof Object);//true
    console.log(person2 instanceof Person);//true


</script>
工厂方法和构造函数区别

1.构造函数没有显示的创建对象
2.属性和方法都赋值给this
3.没有return

注意点

1.构造函数也是函数,和普通函数唯一区别就是调用方式不同。
2.任何函数只要使用new操作符调用就是构造函数,不使用就是普通函数。
3.在调用一个函数而没明确设置this值情况下即(即没有组作为对象方法调用,或者没有使用call()/apply()调用),this就指向Global对象,在浏览器中就是window对象。
4.构造函数也有其问题,每个实例都会创建一边其定义方法,但是其实没有必要,他们是公用方法,只有定义到构造函数之外

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值