工厂模式 创建对象
function creatPerson(name, age, job) {let obj = new Object();obj.name = name;obj.age = age;obj.job = job;obj.sayName = function () {alert(this.name);};return obj;
}let person1 = creatPerson('al',26,'Doctor')
let person2 = creatPerson('hyk',26,'Teacher')
关键字 new + 构造函数 创建对象
function Person(name, age, job) {this.name = name;this.age = age;this.sayName = function () {alert(this.name);};
}let person1 = new Personal("al", 26, "Doctor");
let person2 = new Personal("hyk", 26, "Teacher");
可以看到
这个例子的 Person() , 取代了之前的 creatPerson () ,对比之后可以发现,两个函数中 除了相同的部分之外,还存在以下不同之处
- 没有显式的创建对象,也就是没有使用 new Object() 来创建一个空对象
- 直接将属性和方法赋值给了这个函数内部的 this 对象
- 没有显式的 return 语句 ,我们知道函数没有显式的return,那就在执行完毕之后返回一个undefined
- 函数名是大写字母开头,按照惯例,构造函数函数名始终都应该是 以大写字母开头,非构造函数则是小写,这么写主要是为了区别 其他函数,因为 构造函数本身也是一个函数,只不过可以用来创建对象而已。
可以看到 ,我们创建了 两个 实例,都是通过 使用 new 操作符,实际上在 通过 new 操作符 调用构造函数 的时候 实际上 会经历 以下 四个步骤
- 创建一个新对象
- 将构造函数的 作用域 赋值给新对象,因此 this 就指向了这个新对象
- 执行构造函数中的代码,也就是为这个 新对象 添加属性 和方法,所以是this.属性、this.方法
- 返回新对象