在Js中,咱们使用了new关键字来进行实例化app
那么在这个new的过程当中到底发生了什么?函数
关于构造函数的returnthis
正常来说构造函数中是不用写return语句的,由于它会默认返回新建立的对象。spa
可是,若是在构造函数中写了return语句,若是return的是一个对象,那么函数就会覆盖掉新建立的对象,而返回此对象。prototype
若是return的是基本类型如字符串、数字、布尔值等,那么函数会忽略掉return语句,仍是返回新建立的对象。3d
1 function Foo(){ 2 this.a = 1; 3 this.b = 2; 4 } 5 Foo.prototype.sayMessage = function(){ 6 console.log(this.a+ this.b); 7 } 8 9 var obj = new Foo();
咱们来看看返回了什么:code
1 function Foo(){ 2 this.a = 1; 3 this.b = 2; 4 return { 5 myName: 'GaryGuo' 6 } 7 } 8 Foo.prototype.sayMessage = function(){ 9 console.log(this.a+ this.b); 10 } 11 12 var obj = new Foo();
咱们再来看看返回了什么:对象
其实在new的过程当中发生了四步操做:blog
1 var obj = new Object(); 2 obj.__proto__ = Foo.prototype; 3 var returnVal = Foo.apply(obj, arguments); 4 obj = (returnVal instanceof Object && returnVal) || obj;