var a = new A('hi');
执行new过程:
1.一个新对象被创建。var o = new Object();
2.o继承自A.prototype。o._proto_ = A.prototype;
3.构造函数A被执行。执行的时候,相应的传参会被传入,同时上下文(this)会被指定为这个新实例。
4.如果构造函数返回了一个“对象”,那么这个对象会取代整个new
出来的结果,通过new返回实例化的对象。如果构造函数没有返回对象,那么new
出来的结果为步骤1创建的对象,通过new返回函数内返回的对象。ps:一般情况下构造函数不返回任何值,不过用户如果想覆盖这个返回值,可以自己选择返回一个普通对象来覆盖。当然,返回数组也会覆盖,因为数组也是对象。