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

