js复习---工厂函数---构造函数的执行过程
javascript构造函数
定义: 构造函数一般大写字母开头 构造函数定义时首字母大写(规范), 通过 new 关键字 跟函数名 来实例化对象的函数叫构造函数. 构造函数的主要 功能为 初始化对象,特点是和new 一起使用。new就是在创建对象,从无到有,构造函数就是在为初始化的对象添加属性和方法。
new 关键字的理解 :
new 关键字会申请内存在堆内存开辟一块空间, 后台会隐式执行new Object()创建对象, 通过new创建的字符串、数字是引用类型(堆内存),而是非值类型(栈内存)。
1、常用的构造函数:
1. var arr = []; 为 var arr = new Array(); 的语法糖。
2. var obj = {} 为 var obj = new Object(); 的语法糖
3. var date = new Date();
构造函数执行的过程
/* * 构造函数创建的执行过程 * 1. new 关键字会申请内存开辟一块堆内存空间, new 关键字会隐式创建一个对象 * 2. 将新创建的对象设置为函数中的this, 在构造函数中可以使用this 来引用 * 3. 逐步执行函数代码块里的代码 * 4. 将新建的对象作为返回值 * */ function Person(name, age, gender) { // 添加属性 this.name = name this.age = age this.gender = gender // 添加方法 this.sayName = () => { alert('hello' + this.name) } } const obj = new Person('王尼玛', 30, '人妖') console.log(obj)
工厂模式函数
// 工厂模式函数 function factory(name, age, content) { var obj = new Object(); obj.name = name; obj.age = age; obj.content = content; return obj; // 必须要有返回值 } var factorySon = factory('二狗子', '22', '身娇体柔易'); console.log(factorySon) // Object 工厂函数针对的都是Object的对象模型
构造函数与工厂函数之间差异:
1.工厂函数需要创建对象,以及必须有返回值
2.工厂函数针对的都是Object的对象模型,而构造函数可以匹配自定义的对象模型
即前者不论创建什么都只有一个xx instanceof Object
而后者根据自定义名而定类型,如上举例所示
3.构造函数弊端,如果在全局中定义相同的局部变量,容易造成全局污染,因为this.xx如果在局部获取不到,就会去全局中获取
4.构造函数可以重写,可以在全局中添加新属性和方法Person.prototype = {},但工厂函数只能在局部添加
各自适用场合:
构造函数:适应用于大型项目,属性以及方法时常变换的项目
工厂函数:适应用于小型项目,或者正在制作过程还没有成型的项目