Js new到底发生了什么

在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;
相关文章
相关标签/搜索