無(wú)語(yǔ),一開始以為各位大神都知道這種風(fēng)格就沒加上代碼,結(jié)果問(wèn)題被踩,貴社區(qū)戾氣真重,佩服佩服。
在看《你不知道的js》的時(shí)候了解了這種代碼風(fēng)格,但是貌似(?)這種代碼風(fēng)格不是特別常見,是因?yàn)檫@種風(fēng)格有什么弊端嗎
以下是對(duì)象關(guān)聯(lián)風(fēng)格&面向?qū)ο箫L(fēng)格的對(duì)比
//典型的(‘原型’)面向?qū)ο箫L(fēng)格
function Foo() {
this.me = who;
}
Foo.prototype.identify = function() {
return 'I am '+ this.me;
}
function Bar(who) {
Foo.call(this, who);
}
Bar.prototype = Object.create(Foo.prototype);
Bar.prototype.speak = function() {
alert('hello, '+ this.identify() + '.');
};
var b1 = new Bar('b1');
var b2 = new Bar('b2');
b1.speak();
b2.speak();
//子類Bar繼承了父類Foo,然后生成b1和b2的兩個(gè)實(shí)例。b1委托了Bar.prototype。后者委托了Foo.prototype。這種風(fēng)格很常見。
//對(duì)象關(guān)聯(lián)風(fēng)格來(lái)編寫功能完全相同的代碼
Foo = {
init: function(who) {
this.me = who;
},
identify: function() {
return 'i am '+ this.me
}
};
Bar = Object.create(Foo);
Bar.speak = function() {
alert('hello, '+ this.identify() + '.');
}
var b1 = Object.create(Bar);
b1.init('b1')l
var b2 = Object.create(Bar);
b2.init('b2');
b1.speak();
b2.speak();
//在這段代碼中同樣利用了[[prototype]]把b1委托給Bar并把Bar委托給Foo,和上一段代碼一模一樣。我們?nèi)匀粚?shí)現(xiàn)了三個(gè)對(duì)象之間的關(guān)聯(lián)。在這段代碼中,我們只是把對(duì)象關(guān)聯(lián)起來(lái)了,并不需要那些復(fù)雜又令人困惑的模仿類的行為(構(gòu)造函數(shù),原型以及new)。消消氣消消氣,錯(cuò)在你,不把問(wèn)題描述清楚。
繼承出現(xiàn)最原始的動(dòng)力是復(fù)用代碼。
在這方面,就像你說(shuō)的,如果僅僅是復(fù)用方法,對(duì)象關(guān)聯(lián)肯定更優(yōu)。
那為什么 對(duì)象關(guān)聯(lián) 用的少?
1、沒有正常的對(duì)象識(shí)別關(guān)系
一般認(rèn)為原型指向的是父類,對(duì)象關(guān)聯(lián)不符合這種關(guān)系。
2、平常的需求不單單是繼承方法,還要初始化和繼承屬性。
就像你代碼中的經(jīng)典繼承,Bar 會(huì)繼承 Foo 的屬性,也可以初始化。
對(duì)象關(guān)聯(lián)不可初始化,雖然可以綁定屬性,但在其屬性作為原型都是實(shí)例公共的。
function Bar(who) {
Foo.call(this, who);
}
3、經(jīng)典繼承看起來(lái)的確比對(duì)象關(guān)聯(lián)高級(jí),誰(shuí)都不想低人一等嘛。
4、大家做繼承根本沒想到直接使用對(duì)象,而習(xí)慣性使用構(gòu)造函數(shù)進(jìn)行繼承。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(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庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。