国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js構造函數創建對象是否加new問題

2019-11-19 14:30:01
字體:
來源:轉載
供稿:網友

今天看到這樣一道題:

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

以上就是我們給大家整理的js構造函數創建對象是否加new問題的全部內容,大家閱讀后還有疑問可以在下方留言區討論,感謝你對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 舟山市| 英山县| 莱芜市| 金溪县| 称多县| 株洲县| 长治市| 米泉市| 安乡县| 阿巴嘎旗| 商都县| 鄂州市| 江永县| 仪陇县| 夏河县| 凌云县| 常山县| 宁蒗| 镇赉县| 峨边| 轮台县| 岑巩县| 永顺县| 双鸭山市| 汝南县| 阳高县| 龙口市| 竹山县| 舞钢市| 洪雅县| 绥宁县| 上林县| 十堰市| 东丰县| 固镇县| 杂多县| 太湖县| 禹州市| 蕉岭县| 英德市| 团风县|