首頁  >  文章  >  web前端  >  有關在js中建立物件是否加new?

有關在js中建立物件是否加new?

亚连
亚连原創
2018-06-11 11:58:141933瀏覽

本篇文章主要給大家詳細分析了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運算子做了些什麼呢?

建立一個新物件;

將建構函數的作用域賦給新物件(因此this 就指向了這個新物件);

執行建構函數中的程式碼(為這個新物件新增屬性);

傳回新物件。

問題2:不加new運算子直接執行建構子會發生什呢?

function Obj(name){
this.name = name;
console.log(this); // 严格模式下是undefined 非严格模式下是window对象
}
var a = Obj("name1");
console.log(a); // 结果 => undefined

哦,原來只是當作正常的函數呼叫來執行,Obj沒有回傳值,故a是undefined。

兩者差異總結

使用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;

上面是我整理給大家的,希望今後會對大家有幫助。

相關文章:

在微信小程式中如何實作圖片預覽功能

jquery.picsign中如何使用圖片標註元件

透過webpack如何打包koa2 框架app,該怎麼做?

詳細解讀Vue元件化開發想法

以上是有關在js中建立物件是否加new?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn