填寫"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;