new 运算符 创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。
比较好奇 new 运算符的原理,了解了下,分享给大家。
看一下 MDN 上的简单????:
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
var rand = new Person(“Rand McNally”, 33, “M”);
这样 rand 就是 Person 的实例了。长这样:
自己写一个 New() 方法,如何达到这种效果?四行代码 …
创建空对象;
空对象的__proto__属性指向构造函数的原型对象;
将构造函数的 this 指向空对象,传参并运行该构造函数;
返回对象。
function New (constructor, …args) {
const obj = {};
obj.__proto__ = constructor.prototype;
constructor.call(obj, …args);
return obj;
}
test