2.new操作符
- new操作符具体做了那几件事?
- 创建了一个空对象;
- 将空对象的原型,指向于构造函数的原型;
- 将空对象作为构造函数的上下文(改变this指向);
- 对构造函数有返回值的处理判断。
<script>
function myNew(fn, ...args) {
// 1.创建了一个空对象
// 2.将空对象的原型,指向于构造函数的原型
let obj = Object.create(fn.prototype);
// console.log('第二步:', obj.__proto__ === fn.prototype);
// 3.将空对象作为构造函数的上下文(改变this指向)
let result = fn.apply(obj, args);
// 4.对构造函数有返回值的处理判断
// 当执行new fn()时 , fn里面可能有返回值
// 如果返回值是个对象的话则直接返回,否则返回obj
return result instanceof Object ? result : obj;
}
function Fun(age, name) {
this.age = age;
this.name = name;
return {};
}
console.log(myNew(Fun, 20, 'xxx'));
</script>