在使用new操作符的时候一共经历了4个阶段
var a=new A();
1.创建一个空对象
var a=new Object();
2.设置原型链
a.__proto__=A.prototype
3.赋值this在没有运行之前this是未知的,然后运行函数体内的代码
var result=A.call(a);
function a(){
this.age=2;
a.name=3;
}
var b=new a();
alert(b.age);//2这里体现了this改变了
function a(){
this.age=2;
a.name=3;
}
var b=new a();
b.age=9;
alert(b.age);//这里体现了原型链的执行顺序,搜索首先从本身实例对象开始的,没有才会顺着__proto__向上寻找,而且不能通过对象实例来重写原型中的值,如果实例属性与原型属性重叠,我们可以通过delete来删除实例属性从而访问原型属性
4.返回值类型(默认的是返回this)
如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象。