JavaScript中使用構(gòu)造器創(chuàng)建對(duì)象無(wú)需new的情況說(shuō)明
如下
this.name = name;
this.age = age;
}
var p = new Person('lily', 20);
發(fā)現(xiàn)某些庫(kù)代碼中創(chuàng)建正則對(duì)象的方式無(wú)需new,這讓人感到奇怪。如下
測(cè)試發(fā)現(xiàn)使用或不使用new,最后返回的都是正則對(duì)象,且typeof它們都是“object”。
var reg2 = RegExp('^he$');
reg1.test('he'); // true
reg2.test('he'); // true
console.log(typeof reg1); // object
console.log(typeof reg2); // object
嗯,挺好,代碼運(yùn)行正常。
如果這樣的話干脆就不寫new了,這么還節(jié)省了代碼量。其它類型也是這樣嗎?試試String/Number/Boolean。
var str2 = String(1);
var num1 = new Number('1');
var num2 = Number('1');
var boo1 = new Boolean(1);
var boo2 = Boolean(1);
console.log(typeof str1); // object
console.log(typeof str2); // string
console.log(typeof num1); // object
console.log(typeof num2); // number
console.log(typeof boo1); // object
console.log(typeof boo2); // boolean
可以看到,與正則的情況不同。正則無(wú)論是否new,typeof后都是object。
但String/Number/Boolean類型,new的對(duì)象typeof返回是“object”,不new的typeof返回則是“string”。
即不適用new的情況可以將其它類型分別轉(zhuǎn)化成字符串,數(shù)字和布爾類型。
好了,再回到篇頭的那個(gè)Person類。即我們自己寫的類可以不用new操作符生成對(duì)象嗎?
this.name = name;
this.age = age;
}
var p = Person('lily', 20);
console.log(p); // undefined
返回undefined,很明顯不行。因此想不用new的情況去創(chuàng)建Person實(shí)例是異想天開(kāi)的。
如果非要實(shí)現(xiàn)呢?其實(shí)也行,如下
this.name = name;
this.age = age;
if (this===window) {
return new Person(name, age);
}
}
var p = Person('lily', 20); // object
稍微改造了下Person類。實(shí)際上內(nèi)部區(qū)分了下Person是作為構(gòu)造器還是函數(shù)執(zhí)行。
- 用方法封裝javascript的new操作符(一)
- 淺談javascript中new操作符的原理
- JS重學(xué)系列之聊聊new操作符
- js構(gòu)造函數(shù)創(chuàng)建對(duì)象是否加new問(wèn)題
- JavaScript 三種創(chuàng)建對(duì)象的方法
- JS 創(chuàng)建對(duì)象(常見(jiàn)的幾種方法)
- js中創(chuàng)建對(duì)象的幾種方式示例介紹
- js創(chuàng)建對(duì)象的幾種常用方式小結(jié)(推薦)
- js面向?qū)ο笾R?jiàn)創(chuàng)建對(duì)象的幾種方式(工廠模式、構(gòu)造函數(shù)模式、原型模式)
- javascript的函數(shù)、創(chuàng)建對(duì)象、封裝、屬性和方法、繼承
- JS使用new操作符創(chuàng)建對(duì)象的方法分析
相關(guān)文章
bootstrap table支持高度百分比的實(shí)例代碼
這篇文章給大家介紹了bootstrap table支持高度百分比的實(shí)例代碼,通過(guò)更改BootstrapTable.prototype.resetView 方法,以支持高度百分比定義,適應(yīng)不同高度屏幕,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-02-02Javascript四舍五入Math.round()與Math.pow()使用介紹
本文為大家介紹下Javascript中的四舍五入Math.round()與Math.pow()的使用,感興趣的朋友不要錯(cuò)過(guò)2013-12-12javascript實(shí)現(xiàn)點(diǎn)擊按鈕彈出一個(gè)可關(guān)閉層窗口同時(shí)網(wǎng)頁(yè)背景變灰的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)點(diǎn)擊按鈕彈出一個(gè)可關(guān)閉層窗口同時(shí)網(wǎng)頁(yè)背景變灰的方法,涉及javascript鼠標(biāo)事件及頁(yè)面元素樣式操作的相關(guān)技巧,需要的朋友可以參考下2015-05-05Easyui Tree獲取當(dāng)前選擇節(jié)點(diǎn)的所有頂級(jí)父節(jié)點(diǎn)
這篇文章主要介紹了Easyui Tree獲取當(dāng)前選擇節(jié)點(diǎn)的所有頂級(jí)父節(jié)點(diǎn),以及easyUI Tree顯示選中節(jié)點(diǎn)的所有父節(jié)點(diǎn)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-02-02php+js實(shí)現(xiàn)倒計(jì)時(shí)功能
由PHP傳入JS處理的時(shí)間戳我說(shuō)怎么老是對(duì)不上號(hào)呢,原來(lái)JS時(shí)間戳為13位,包含3位毫秒的,而PHP只有10位不包含毫秒的。恩,基礎(chǔ)還是要補(bǔ)補(bǔ)的2014-06-06JS與jQuery遍歷Table所有單元格內(nèi)容的方法
這篇文章主要介紹了JS與jQuery遍歷Table所有單元格內(nèi)容的方法,結(jié)合實(shí)例形式分別描述了JavaScript與jQuery實(shí)現(xiàn)遍歷table單元格的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-12-12JS清除字符串中重復(fù)值的實(shí)現(xiàn)方法
這篇文章主要介紹了JS清除字符串中重復(fù)值的實(shí)現(xiàn)方法,涉及javascript數(shù)組與字符串的遍歷、比較及數(shù)學(xué)運(yùn)算相關(guān)技巧,需要的朋友可以參考下2016-08-08Uncaught?SyntaxError:Unexpected?token?'<'?(
這篇文章主要為大家介紹了JS判斷趨近于直線的多邊形(退化多邊形)實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01微信網(wǎng)頁(yè)授權(quán)并獲取用戶信息的方法
這篇文章主要介紹了微信網(wǎng)頁(yè)授權(quán)并獲取用戶信息的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07