填写"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;
new
操做符作了些什么呢?new
操做符直接执行构造函数会发生什呢?function Obj(name){ this.name = name; console.log(this); // 严格模式下是undefined 非严格模式下是window对象 } var a = Obj("name1"); console.log(a); // 结果 => undefined
哦,原来只是看成正常的函数调用来执行,Obj没有返回值,故a
是undefined
。javascript
使用new
操做符建立对象,而且构造函数没有返回值
或者返回为基本数据类型
,那么返回该对象,以下例:java
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值,若是返回的是一个引用类型,那么返回该引用类型。this
参考答案 :prototype
function Obj(name){ this.name = name; return this; } Obj.prototype.name = "name2"; var a = Obj("name1"); var b = new Obj;