new 一个对象的过程

  1. 创建一个新的空对象

  2. 将构造函数的作用域赋给新对象(this指向它)

  3. 新对象增加构造函数的基本方法和属性。

  4. 返回新对象

实现

function create() {
  //创建一个空对象
  let obj = new Object();
  //获取构造函数
  let Constructor = [].shift.call(arguments);
  //链接到原型
  obj._proto_ = Constructor.prototype;
  //绑定this值
  let result = Constructor.apply(obj, arguments); //使用apply,将构造函数中的this指向新对象,这样新对象就可以访问构造函数中的属性和方法
  //返回新对象
  return typeof result === "object" ? result : obj; //如果返回值是一个对象就返回该对象,否则返回构造函数到一个实例对象
}

使用

function People(name, age) {
  this.name = name;
  this.age = age;
}
//通过new创建构造实例
let people1 = new People("Jack", 20);
console.log(people1.name); //Jack
console.log(people1.age); //20
//通过create方法创建实例
let people2 = create(People, "Rose", 18);
console.log(people2.name); //Rose
console.log(people2.age); //18
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容