javascript中使用new與不使用實(shí)例化對(duì)象的區(qū)別
我們先來(lái)看個(gè)實(shí)例
function Me(name,age,job){
this.name = name;
this.age = age;
this.job = job;
}
請(qǐng)問(wèn)這以下兩種實(shí)例化對(duì)象方式有什么區(qū)別呢?
var mefun1 = new Me('fei','20','it');
var mefun2 = Me('fei','20','it');
簡(jiǎn)單的說(shuō)
第一種是構(gòu)造函數(shù)式,即通過(guò)new運(yùn)算符調(diào)用構(gòu)造函數(shù)Function來(lái)創(chuàng)建函數(shù)
第二種不是實(shí)例化,只是調(diào)用函數(shù)把返回值賦給變量。
再擴(kuò)展下
JavaScript 中并沒(méi)有真正的類(lèi),但JavaScript 中有構(gòu)造函數(shù)和new 運(yùn)算符。構(gòu)造函數(shù)用來(lái)給實(shí)例對(duì)象初始化屬性和值。任何JavaScript 函數(shù)都可以用做構(gòu)造函數(shù),構(gòu)造函數(shù)必須使用new 運(yùn)算符作為前綴來(lái)創(chuàng)建新的實(shí)例。
new 運(yùn)算符改變了函數(shù)的執(zhí)行上下文,同時(shí)改變了return 語(yǔ)句的行為。實(shí)際上,使用new和構(gòu)造函數(shù)很類(lèi)似于傳統(tǒng)的實(shí)現(xiàn)了類(lèi)的語(yǔ)言:
// 實(shí)例化一個(gè)Me
var alice = new Me('alice', 18, 'Coder');
// 檢查這個(gè)實(shí)例
assert( alice instanceof Me );
構(gòu)造函數(shù)的命名通常使用駝峰命名法,首字母大寫(xiě),以此和普通的函數(shù)區(qū)分開(kāi)來(lái),這是
一種習(xí)慣用法。
// 不要這么做!
Me('alice', 18, 'Coder'); //=> undefined
這個(gè)函數(shù)只會(huì)返回undefined,并且執(zhí)行上下文是window(全局)對(duì)象,無(wú)意間創(chuàng)建了3個(gè)全局變量name,age,job。調(diào)用構(gòu)造函數(shù)時(shí)不要丟掉new 關(guān)鍵字。
當(dāng)使用new 關(guān)鍵字來(lái)調(diào)用構(gòu)造函數(shù)時(shí),執(zhí)行上下文從全局對(duì)象(window)變成一個(gè)空的上下文,這個(gè)上下文代表了新生成的實(shí)例。因此,this 關(guān)鍵字指向當(dāng)前創(chuàng)建的實(shí)例。盡管理解起來(lái)有些繞,實(shí)際上其他語(yǔ)言內(nèi)置類(lèi)機(jī)制的實(shí)現(xiàn)也是如此。
默認(rèn)情況下,如果你的構(gòu)造函數(shù)中沒(méi)有返回任何內(nèi)容,就會(huì)返回this——當(dāng)前的上下文。
要不然就返回任意非原始類(lèi)型的值.
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
相關(guān)文章
js?promise?中使用?setTimeout?實(shí)現(xiàn)暫停執(zhí)行的效果
這篇文章主要介紹了js?promise?中使用?setTimeout?實(shí)現(xiàn)暫停執(zhí)行的,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
Jjcarousellite 實(shí)現(xiàn)圖片列表滾動(dòng)的簡(jiǎn)單實(shí)例
這篇文章主要介紹了Jjcarousellite 實(shí)現(xiàn)圖片列表滾動(dòng)的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下2013-11-11
基于滾動(dòng)條位置判斷的簡(jiǎn)單實(shí)例
下面小編就為大家分享一篇基于滾動(dòng)條位置判斷的簡(jiǎn)單實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
基于insertBefore制作簡(jiǎn)單的循環(huán)插空效果
這是一個(gè)基于insertBefore制作簡(jiǎn)單的循環(huán)插空效果,實(shí)現(xiàn)的數(shù)字下面循環(huán)插空效果,給需要的朋友分享。2015-09-09
JavaScript返回上一頁(yè)的三種方法及區(qū)別介紹
這篇文章主要介紹了JavaScript返回上一頁(yè)的三種方法及區(qū)別介紹,本文直接給出示例代碼,需要的朋友可以參考下2015-07-07
Javascript中With語(yǔ)句用法實(shí)例
這篇文章主要介紹了Javascript中With語(yǔ)句用法,實(shí)例分析了javascript中with語(yǔ)句的相關(guān)使用方法,類(lèi)似VB語(yǔ)句的用法,需要的朋友可以參考下2015-05-05
JavaScript開(kāi)發(fā)人員的10個(gè)關(guān)鍵習(xí)慣小結(jié)
還在一味沒(méi)有目的的編寫(xiě)JavaScript代碼嗎?那么你就OUT了!讓我們一起來(lái)看看小編為大家搜羅的JavaScript開(kāi)發(fā)人員應(yīng)該具備的十大關(guān)鍵習(xí)慣吧2014-12-12

