Js new到底发生了什么
2017-01-06 16:44
337 查看
在Js中,我们使用了new关键字来进行实例化
那么在这个new的过程中到底发生了什么?
关于构造函数的return
正常来讲构造函数中是不用写return语句的,因为它会默认返回新创建的对象。
但是,如果在构造函数中写了return语句,如果return的是一个对象,那么函数就会覆盖掉新创建的对象,而返回此对象。
如果return的是基本类型如字符串、数字、布尔值等,那么函数会忽略掉return语句,还是返回新创建的对象。
我们来看看返回了什么:
我们再来看看返回了什么:
其实在new的过程中发生了四步操作:
那么在这个new的过程中到底发生了什么?
关于构造函数的return
正常来讲构造函数中是不用写return语句的,因为它会默认返回新创建的对象。
但是,如果在构造函数中写了return语句,如果return的是一个对象,那么函数就会覆盖掉新创建的对象,而返回此对象。
如果return的是基本类型如字符串、数字、布尔值等,那么函数会忽略掉return语句,还是返回新创建的对象。
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();
我们来看看返回了什么:
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的过程中发生了四步操作:
1 var obj = new Object(); 2 obj.__proto__ = Foo.prototype; 3 var returnVal = Foo.apply(obj, arguments); 4 obj = (returnVal instanceof Object && returnVal) || obj;
相关文章推荐
- 当人感觉心痛的时候,身体到底发生了什么?
- Measure(0,0)到底发生了什么
- 运算符重载时到底发生了什么?【DEBUG】
- 从输入URL到页面展示到底发生了什么
- ResultSet.TYPE_SCROLL_SENSITIVE到底发生了什么?
- 从浏览器输入网址到显示网站页面之间到底发生了什么?系列(一)
- 【原】老生常谈-从输入url到页面展示到底发生了什么
- $(".class")后到底发生了什么 -- jquery选择器分析
- C#参数传递时到底发生了什么二(ref)
- 从输入url到页面展示到底发生了什么
- 当你的iPhone收到推送信息后到底会发生什么呢?
- 字符串从内存写入到磁盘的过程中到底发生了什么(一)
- 当你的iPhone收到推送信息后到底会发生什么呢?总共有三种可能性
- 从输入url到页面展示到底发生了什么
- C#参数传递时到底发生了什么二(ref)
- 老生常谈-从输入url到页面展示到底发生了什么
- 从输入 URL 到页面展示,到底发生了什么
- 云智慧悄然“变身”业务运维,到底发生了什么?
- 老生常谈-从输入url到页面展示到底发生了什么
- (++a)+=(a++)到底发生了什么