new操作最终实现的是创建一个对应特定的构造函数的对象
instance = new constructor();
创建的过程:
1. 首先创建一个空对象
instance = new Object()
2. 将该对象的原型指向构造函数的原型对象,设置原型链
将创建的对象与要对应的构造函数利用原型连接起来
设置原型链(当调用构造函数创建一个新实例后,该实例的内部将包含一个指针(内部属性),指向构造函数的原型对象)
instance._proto_ = Func.prototype
3. 将构造函数的this指向创建的对象,并执行构造函数
调用构造函数,将函数的上下文环境设置为instance,然后执行构造函数的内容
var result = Func.call(instance)
4. 判断func的返回值类型,确保返回值是对象类型
如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象
if (typeof(result) == "object"){
func=result;
}
else{
func=obj;;
}