new的时候实际做了什么【02-26更新】

什么是new

new存在于各种语言中,作用基本大家都明白,就是通过指定类来新建一个对象。那么在JS里面,实际做的操作有哪些呢?

实际操作

可以来实现一个New函数:

1
2
3
4
5
6
7
8
9
function New(func) {
let res = Object.create(func.prototype)
let ret = func.apply(res, Array.prototype.slice.call(arguments, 1));
return (ret && typeof ret === "object") ? ret : res
}

var obj1 = New(A, 1, 2);
// 相当于
var obj2 = new A(1,2)

具体步骤:

  1. 通过Object.create(...)传入构造函数的原型对象来创建一个新的object对象,并且它的__proto__会指向构造函数的原型对象,命名为res
  2. 传入res作为构造函数func调用的作用域,并且传入除第一个以外的参数(因为第一个参数传入的是要实例化的构造函数)。
  3. 如果构造函数执行后有返回对象ret,则返回该对象,没有的话就返回前面创建的res