function Person(n, a, g){
this.name = n;
this.age = a;
this.gender = g;
this.speak = function (){ //這里只是說明this,實(shí)際應(yīng)該在prototype上定義對象方法
console.log(this);
};
}
//作為構(gòu)造函數(shù)使用
var o = new Person("Lily", 18, "F");
o.speak(); //Person {name: "Lily", age: 18, gender: "F"}
//作為普通函數(shù)使用
Person("Lily", 18, "F");
speak(); //Window
正在看一段this的說明,提到上面這段函數(shù)時(shí) 作者解釋“為什么11行得到的是Person...,而不是Object...。其實(shí)這里顯示的本來就應(yīng)該是構(gòu)造函數(shù)的名字,如果你通過varo=;創(chuàng)建的對象,相當(dāng)于o=newObject();,這時(shí)顯示的才是Object...” 這句話看不明白 Object和這個(gè)有什么區(qū)別呢 這樣解釋是什么意思
js本來沒有new,需要的人多了,也就有了new
首先我們來看一個(gè)函數(shù)
function Person(n, a, g) {
var obj = {
name: n,
age: a,
gender: g
}
obj.constructor = Person; // 給個(gè)標(biāo)記表示這個(gè)obj由Person生成
// 其他的屬性 obj.blabla....
obj.speak = function () {
console.log(this);
}
return obj;
}
var o = Person(n, a, g)
這個(gè)應(yīng)該挺好懂吧,新建一個(gè)對象然后返回,這個(gè)函數(shù)我們叫工廠函數(shù),就是每次都生成同一種對象然后返回。
后來人們想著,我每次這樣寫其實(shí)挺費(fèi)勁的,有沒有更好的辦法呢。
然后就有了
function Person(n, a, g) {
this.name = n;
this.age = a;
this.gender = g;
this.speak = function () {
console.log(this);
};
}
var o = new Person(n, a, g)
這個(gè)函數(shù)我們就叫構(gòu)造函數(shù),當(dāng)我們使用new Person()時(shí)它執(zhí)行的過程就跟上面的工廠函數(shù)基本是一樣的,不過這個(gè)函數(shù)自動(dòng)幫我們處理了很多事,方便很多。具體可以看new運(yùn)算符
那么不用new的時(shí)候呢?它就是一個(gè)普通函數(shù)。
那么我們回到上面的問題,Object和這個(gè)有什么區(qū)別
上面說了new的時(shí)候會(huì)先新建一個(gè)對象,然后我們的構(gòu)造函數(shù)會(huì)給新建的對象打上標(biāo)記constructor,用來表示這個(gè)對象是由哪個(gè)函數(shù)生成的,所以用new Person()出來的對象顯示的是Person,而new Object()出來的對象就是Object,雖然他們一開始都是對象Object
你的疑惑只是不知道 new 關(guān)鍵字做了什么而已;
MDN官網(wǎng)有詳細(xì)的解釋,解釋的其實(shí)非常詳細(xì)了,個(gè)人就不獻(xiàn)丑了
new運(yùn)算符
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。