什么是new
new
存在于各种语言中,作用基本大家都明白,就是通过指定类来新建一个对象。那么在JS里面,实际做的操作有哪些呢?
实际操作
可以来实现一个New
函数:1
2
3
4
5
6
7
8
9function 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)
具体步骤:
- 通过
Object.create(...)
传入构造函数的原型对象来创建一个新的object
对象,并且它的__proto__
会指向构造函数的原型对象,命名为res
- 传入
res
作为构造函数func
调用的作用域,并且传入除第一个以外的参数(因为第一个参数传入的是要实例化的构造函数)。 - 如果构造函数执行后有返回对象
ret
,则返回该对象,没有的话就返回前面创建的res
。