关键字 new 创建对象的内部步骤

 工厂模式 创建对象

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 () ,对比之后可以发现,两个函数中 除了相同的部分之外,还存在以下不同之处

  1. 没有显式的创建对象,也就是没有使用 new Object()  来创建一个空对象
  2. 直接将属性和方法赋值给了这个函数内部的 this 对象
  3. 没有显式的 return 语句 ,我们知道函数没有显式的return,那就在执行完毕之后返回一个undefined
  4. 函数名是大写字母开头,按照惯例,构造函数函数名始终都应该是 以大写字母开头,非构造函数则是小写,这么写主要是为了区别 其他函数,因为 构造函数本身也是一个函数,只不过可以用来创建对象而已。

可以看到 ,我们创建了 两个 实例,都是通过 使用 new 操作符,实际上在 通过 new 操作符  调用构造函数  的时候 实际上 会经历 以下 四个步骤

  1. 创建一个新对象
  2. 将构造函数的 作用域 赋值给新对象,因此 this  就指向了这个新对象
  3. 执行构造函数中的代码,也就是为这个 新对象 添加属性 和方法,所以是this.属性、this.方法
  4. 返回新对象

你可能感兴趣的:(js专栏,javascript,前端)