js组织函数建立对象加new与不加new的题目

本日看到如许一道题:

填写”TO DO”处的内容让下面代码支撑a.name = “name1”; b.name = “name2”;

function Obj(name){
      // TO DO
}
obj. /* TO DO  */ = "name2";
var a = Obj("name1");
var b = new Obj;
题目1:new操作符做了些什么呢?
  1. 建立一个新对象;
  2. 将组织函数的作用域赋给新对象(因而 this 就指向了这个新对象) ;
  3. 实行组织函数中的代码(为这个新对象增加属性) ;
  4. 返回新对象。
题目2:不加new操作符直接实行组织函数会发作什呢?
function Obj(name){
    this.name = name;
    console.log(this); // 严厉形式下是undefined 非严厉形式下是window对象
}

var a = Obj("name1");
console.log(a); // 效果 => undefined

哦,本来只是看成一般的函数调用来实行,Obj没有返回值,故aundefined

二者区分总结

运用new操作符建立对象,而且组织函数没有返回值或许返回为基础数据范例,那末返回该对象,如下例:

function Obj(name){
      this.name = name;
}
var b = new Obj;
console.log(b);  // Obj { name: undefined }
function Obj(name){
      this.name = name;
    return 'chic';
}
var b = new Obj;
console.log(b); // 同上

假如组织函数返回一个援用范例

function Obj(name){
      this.name = name;
    return {};
}
var b = new Obj;
console.log(b); // {}
总结

关于不加new来实行组织函数来讲,返回值就是组织函数的实行效果;关于加new关键字来实行组织函数而言,假如return的是基础数据范例,那末无视掉该return值,假如返回的是一个援用范例,那末返回该援用范例。

那末题目答案你有了吗?

参考答案 :

function Obj(name){
    this.name = name;
    return this;
}
Obj.prototype.name = "name2";
var a = Obj("name1");
var b = new Obj;
    原文作者:chic
    原文地址: https://segmentfault.com/a/1190000012925588
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞