new的过程
//例子:
// function Person(name,age) {
this.userName = name;
this.userAge = age;
}
var personl = new Person('周杰伦',20)
1.创建一个新对象
// obj = {}
2.设置原型链
让这个新的对象的原型指向该构造函数的原型对象。
将新对象obj的 __proto__属性指向构造函数的prototype 对象。(即所有实例对象通过__proto__可 以访问原型对象。构造函数的原型被其所有实例对象共享。)
// obj.__proto__= Person.prototype
3.执行构造函数,并且将构造函数指向新的对象。
将构造函数的this改指向新对象ob j并执行函数代码。
// var result = Person.apply(obj,['周杰伦',20])
4.拿到构造函数最后返回的结果,判断是否是对象或者函数,如果是的话,则直接返回。如果不是则返回新创建的对象。
// if (typeof(result) == 'object') {
return result;
}else{
return obj;
}