创建一个新的空对象
将构造函数的作用域赋给新对象(this指向它)
新对象增加构造函数的基本方法和属性。
返回新对象
实现
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