# new命令
new
命令的作用,就是执行构造函数,返回一个实例对象。
new操作符的具体功能
- 在堆区创建一个空对象
- 把这个对象的原型属性也就是
__proto__
指向构造函数的原型对象 - 把构造函数的this指向这个对象,运行构造函数赋值
- 如果构造函数返回值不是一个引用对象或者说没有返回值, 则返回这个对象
# 模式实现
function objectFactory() {
const obj = new Object();
const Constructor = [].shift.call(arguments);
if (typeof Constructor !== 'function') {
throw new TypeError('Expect a function');
}
obj.__proto__ = Constructor.prototype;
var ret = Constructor.apply(obj, arguments);
return typeof ret === 'object' && ret !== null ? ret : obj;
}
使用instanceof判断构造函数内部是不是用了new命令
function Person(name) {
if (!(this instanceof Person)) {
throw new Error('call the function with new keyword');
}
this.name = name;
}
也可以使用new.target
来判断
function Animal(name) {
if (!new.target) {
throw new Error('call the function with new keyword');
}
this.name = name;
}