js new操作符

new操作符干了啥?
如下

var F=function(){
    //this指向谁,在定义时是不知道的
};

var p=new F;

做了这四步:
1.创建一个空的对象就是
p={}
或者p=new Object
2.设置原型链
p.proto=F.prototype;
就是把构造函数的prototype属性给了实例的proto属性。
3.让F中的this指向实例p,执行F的函数体。
4.判断F的返回值类型:

换种说法
(1) 首先, 当我们使用new操作符时, js会先创建一个空的对象;
(2) 然后, 构造函数中的this指向该空对象;
(3) 其次, 在构造函数中通过操作this, 来给这个空对象赋予相应的属性;
(4) 最后, 返回这个经过处理的"空对象"(此时, 对象已经不是空的了).

(1) 如果构造函数的返回值是一个原始类型(非引用对象, 如字符串)

,那么返回值为new创建的"空对象", 如:

var obj = new Function() { 
return "code";};
alert(obj); // [object object]
(2) 如果构造函数的返回值是一个引用对象(数组, 对象, 函数等),

那么返回值会覆盖new创建的"空对象", 如:

var obj = new Function() { 
return new String("code"); };
alert(obj); // "code"

参考

new operator - JavaScript | MDN

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1,javascript 基础知识 Array对象 Array对象属性 Arrray对象方法 Date对象 Dat...
    Yuann阅读 4,547评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,455评论 0 4
  • 我想起拉封丹的一个寓言:有两个朋友住在一个城里,其中一个深夜去找另一个。那人连忙爬起来,披上铠甲,右手执剑,左手执...
    天水讼阅读 3,301评论 0 4
  • 三月可园荷清清,小步探栏雏月林。 袅袅翠亭岭南情,倚窗听鹅不知行。 。
    王兄保重阅读 988评论 0 1
  • 如果说2014年和2015年是互联网行业井喷的时期,那么2016年就是厮杀最惨烈的阶段,2016年也是划分阶层的一...
    小包包杂记阅读 1,651评论 0 0