1.new是什么
定义: new操作符用于创建一个给定构造函数的实例对象。
2.new操作符的执行过程
1.创建了一个空对象;
2.将空对象的原型,指向于构造函数的原型
3.将空对象作为构造函数的上下文(改变this指向)
4.对构造函数有返回值的处理判断,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象 。
3.手写流程,如果实现:
function Fun( age,name ){
this.age = age;
this.name = name;
}
function create( fn , ...args ){
//1. 创建了一个空的对象
var obj = {}; //var obj = Object.create({})
//2. 将空对象的原型,指向于构造函数的原型
// Object.setPrototypeOf(obj,fn.prototype);
obj.__proto__ = fn.prototype;
//3. 将空对象作为构造函数的上下文,改变this指向,即obj绑定到构造函数上,便可以访问构造函数中的属性,即obj.fn(args))
var result = fn.apply(obj,args);
//4. 对构造函数有返回值的处理判断
// 如果返回的result是一个对象则返回
// new方法失效,否则返回obj
return result instanceof Object ? result : obj;
}
// 测试一下
console.log( create(Fun,18,'张三') )