JavaScript中的new的使用方法與注意事項(xiàng)
http://yuiblog.com/blog/2006/11/13/javascript-we-hardly-new-ya/
其實(shí)你永遠(yuǎn)不需要在JavaScript使用 new Object()。用字面量的形式{}去取代吧。
同理,不要使用 new Array() ,而代之以字面量[]。JavaScript中的數(shù)組并不象Java中的數(shù)組那樣工作的,使用類似Java的語(yǔ)法只會(huì)讓你糊涂。
同理不用使用 new Number, new String, 或者 new Boolean。這些的用法只會(huì)產(chǎn)生無(wú)用的類型封裝對(duì)象。就直接使用簡(jiǎn)單的字面量吧。
不要使用 new Function 去創(chuàng)建函數(shù)對(duì)象。用函數(shù)表達(dá)式更好。比如:
frames[0].onfocus = new Function(”document.bgColor='antiquewhite'”)
更好的寫(xiě)法是:
frames[0].onfocus = function () {document.bgColor = ‘a(chǎn)ntiquewhite';};
第二種形式讓腳本編譯器更快的看到函數(shù)主體,于是其中的語(yǔ)法錯(cuò)誤也會(huì)更快被檢測(cè)出來(lái)。有時(shí)候程序員使用 new Function 是因?yàn)樗麄儧](méi)有理解內(nèi)部函數(shù)是如何工作的。
selObj.onchange = new Function(”dynamicOptionListObjects[”+
dol.index+”].change(this)”);
如果我們讓用字符串做函數(shù)體,編譯器不能看到它們。如果我們用字符串表達(dá)式做函數(shù)體,我們同樣也看不到它們。更好的方式就是不要盲目編程。通過(guò)制造一個(gè)返回值為函數(shù)的函數(shù)調(diào)用,我們可以明確的按值傳遞我們想要綁定的值。這允許我們?cè)谘h(huán)中初始化一系列 selObj 對(duì)象。
selObj.onchange = function (i) {
return function () {
dynamicOptionListObjects[i].change(this);
};
}(dol.index);
直接對(duì)一個(gè)函數(shù)使用new永遠(yuǎn)不是一個(gè)好主意。比如, new function 對(duì)構(gòu)造新對(duì)象沒(méi)有提供什么優(yōu)勢(shì)。
myObj = new function () {
this.type = ‘core';
};
更好的方式是使用對(duì)象字面量,它更輕巧,更快捷。
myObj = {
type: ‘core'
};
假如我們需要?jiǎng)?chuàng)建的對(duì)象包含的方法需要訪問(wèn)私有變量或者函數(shù),更好的方式仍然是避免使用new.
var foo = new function() {
function processMessages(message) {
alert(”Message: ” + message.content);
}
this.init = function() {
subscribe(”/mytopic”, this, processMessages);
}
}
通過(guò)使用 new 去調(diào)用函數(shù),對(duì)象會(huì)持有一個(gè)無(wú)意義的原型對(duì)象。這只會(huì)浪費(fèi)內(nèi)存而不會(huì)帶來(lái)任何好處。如果我們不使用new,我們就不用在對(duì)象鏈維護(hù)一個(gè)無(wú)用的prototype對(duì)象。所以我們可以用()來(lái)正確的調(diào)用工廠函數(shù)。
var foo = function () {
function processMessages(message) {
alert(”Message: ” + message.content);
}
return {
init: function () {
subscribe(”/mytopic”, this, processMessages);
}
};
}();
所以原則很簡(jiǎn)單: 唯一應(yīng)該要用到new操作符的地方就是調(diào)用一個(gè)古老的構(gòu)造器函數(shù)的時(shí)候。當(dāng)調(diào)用一個(gè)構(gòu)造器函數(shù)的時(shí)候,是強(qiáng)制要求使用new的。有時(shí)候可以來(lái)new一下, 有的時(shí)候還是不要了吧。
可以參考以下文章,英文的:http://msdn.microsoft.com/msdnmag/issues/07/05/JavaScript/default.aspx?loc=en#S6
- JavaScript定義數(shù)組的三種方法(new Array(),new Array(''x'',''y'')
- javascript中new關(guān)鍵字詳解
- Javascript new關(guān)鍵字的玄機(jī) 以及其它
- 詳解Javascript中new()到底做了些什么?
- javascript new一個(gè)對(duì)象的實(shí)質(zhì)
- js中new一個(gè)對(duì)象的過(guò)程
- 詳解javascript new的運(yùn)行機(jī)制
- javascript new 需不需要繼續(xù)使用
- JavaScript中實(shí)現(xiàn)new的兩種方式引發(fā)的探究
相關(guān)文章
JS中的常見(jiàn)數(shù)組遍歷案例詳解(forEach,?map,?filter,?sort,?reduce,?ever
這篇文章主要介紹了JS中的常見(jiàn)數(shù)組遍歷方法詳解(forEach,?map,?filter,?sort,?reduce,?every),本篇講用實(shí)際案例詳解他們的語(yǔ)法和用法,需要的朋友可以參考下2023-05-05微信小程序picker組件下拉框選擇input輸入框的實(shí)例
這篇文章主要介紹了微信小程序picker組件下拉框選擇input輸入框的實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09javascript中Array()數(shù)組函數(shù)詳解
在JavaScript中數(shù)組也是比較常用的對(duì)象之一,數(shù)組是值的有序集合,本篇文章給大家分享Javascript中Array()數(shù)組函數(shù)詳解,需要的朋友可以參考下2015-08-08用javascript實(shí)現(xiàn)讀取txt文檔的腳本
用javascript實(shí)現(xiàn)讀取txt文檔的腳本...2007-07-07利用svg實(shí)現(xiàn)帶加載進(jìn)度的loading
svg是基于XML,由World?Wide?Web?Consortium?(W3C)聯(lián)盟開(kāi)發(fā)的一種開(kāi)放標(biāo)準(zhǔn)的矢量圖形語(yǔ)言,可讓你設(shè)計(jì)激動(dòng)人心的、高分辨率的Web圖形頁(yè)面。本文將使用svg實(shí)現(xiàn)一個(gè)帶加載進(jìn)度的loading,需要的可以參考一下2022-11-11javascript移動(dòng)端 電子書(shū) 翻頁(yè)效果實(shí)現(xiàn)代碼
這篇文章主要介紹了javascript移動(dòng)端 電子書(shū) 翻頁(yè)效果實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09理解JavaScript設(shè)計(jì)模式中的單例模式
這篇文章主要介紹了理解JavaScript設(shè)計(jì)模式中的單例模式,單例模式即Singleton?Pattern是最簡(jiǎn)單的設(shè)計(jì)模式之一,下文更多相關(guān)介紹感興趣的小伙伴可以參考一下2022-04-04javascript實(shí)現(xiàn)可改變滾動(dòng)方向的無(wú)縫滾動(dòng)實(shí)例
無(wú)縫滾動(dòng)在制作一些圖片展示的時(shí)候還是蠻有用的,下面與大家分享下javascript實(shí)現(xiàn)的可改變滾動(dòng)方向的無(wú)縫滾動(dòng),具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下哈2013-06-06