问题:使用内置构造函数和字面量的方式来创建对象差不多,都存在以下问题:
- 创建的对象无法复用,复用性差。
- 如果需要创建多个同类型的对象,如(狗)则需要些大量重复代码,代码冗余度较高。
var p1 = { name:'张三', run:function () { console.log(this.name + '跑'); } }; p1.run();
问题:使用内置构造函数和字面量的方式来创建对象差不多,都存在以下问题:
- 创建的对象无法复用,复用性差
- 如果需要创建多个同类型的对象,如(狗)则需要些大量重复代码,代码冗余度较高。
var p2 = new Object(); p2.name = '李四'; p2.run = function () { console.log(this.name + '跑'); }; p2.run()
简单工厂模式
工厂里面有一些产品的模板,只需要给工厂提供原材料,工厂按照固定的加工方式,就可以返回外界同一类型的产品
问题:无法判断类型
-
自定义构造函数和简单工厂函数的对比
① 函数的首字母大写(用于区别构造函数和普通函数)
② 创建对象的过程是由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();
-
构造函数的执行过程
① 自动创建空对象,把对象地址给了this,this指向 新对象
② this 给空对象绑定属性和行为
③ 返回this -
构造函数的返回值说明.
① 如果在构造函数中没有显示的return,则默认返回的是新创建出来的对象
② 如果在构造函数中有显示的return,则依照具体的情况出题。- 如果不写,直接返回默认创建的新对象
- return的是this,直接返回默认创建的新对象
- return的是null或基本数据类型,则返回新创建的对象。
- return的是对象,则直接返回该对象,取而代之本该默认返回的新对象
总结:类型匹配才接受 → 对象