我们不可能使用字面量创建大量的对象,其中存在许多的重复代码,我们就需要一个工厂来批量生产相似对象。
使用工厂方法创建对象,使用的构造函数都是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.构造函数也有其问题,每个实例都会创建一边其定义方法,但是其实没有必要,他们是公用方法,只有定义到构造函数之外