北大青鳥金碼學校是東莞電腦培訓是東莞專業IT培訓機構、東莞電腦培...
新媒體
一個有自己主意的孩子才是有前途的孩子
2023學什么技術好
全棧軟件測試
年味的記憶嘉華教育集團第二屆手機攝影大賽
北大青鳥東莞金碼學校Java培訓,中國Java培訓領跑品牌,關注Java培訓1...
我有基礎
構造函數、實例和原型的概念和關系
每個函數都屬于對象,都會有一個屬性叫prototype。這個屬性指向一個對象,我們把他叫做當前函數的原型對象。原型對象下面有個屬性叫constructor.這個屬性指向當前函數。函數又分為普通函數和構造函數。這里我們說一下構造函數:
定義一個函數 :
function Person(x, y ) {
this.age = x;
this.name = y;
}
var xiaoming= new Person(12, "xiaoming" );
這里創建實例對象 xiaoming的時候就是調用了Person構造函數,使xiaoming有了自己的屬性和方法,之后xiaoming和Person也就沒有什么直接交集了(可以理解為小明分手了,哎程序員好難╥..╥)
但是每個實例對象都會有一個隱藏屬性[[prototype]],這個屬性在chrome/firefox下叫__proto__,僅僅供學習調試用.它指向的就是構造函數的原型對象。
原型對象的深入理解
對于這個原型對象,我們就要重點理解下了。這個對象的作用就是為了讓所有的實例對象都能共享這個對象的屬性和方法(當然實例本身的屬性和方法優先級是高于原型的)。每個構造函數都會有一個默認的原型對象。我們只要在改原型對象上做文章就可以實現很多功能。
● 共享屬性和方法:
Person.prototype.eyes = 2;
Person.prototype.walk = function ( ){……};
var xiaoming= new Person(12, "xiaoming" );
var xiaohong= new Person(12, "xiaohong" );
xiaoming.eyes
xiaohong.eyes
// 小明和小紅都有2只眼
xiaoming.walk
xiaohong.walk
//小明和小紅都會走路
● 原型鏈:
我們先做一個假設,假如我們把一個函數對象Man的原型直接給換成另一個函數對象Person的實例對象xiaoming會怎么樣呢?
前面說了,通過實例對象是可以找到函數對象Person的原型。那我們現在Man對象的實例xiaoming是不是也就可以訪問到Person對象的原型對象了呢。
function Man( ) {
this.beard = "xxx";
}
Man.prototype = new Person( 23, "xiaoming" );
這里我們相當于把默認的那個原型給重寫了,給參數其實就是給原型添加屬性和方法
var xiaoming = new Man();
xiaoming.beard //xxx 這里實例xiaoming自己的屬性(小明有胡子)
xiaoming.age //23
xiaoming.name //xiaoming 這兩個屬性是實例的原型上面的屬性(其實這個屬性是Person實例的屬性,但是現在的原型不就是Person實例嗎)
xiaoming.eyes //2 這個屬性呢,是Person的原型對象上面的了
這里我們基本上都可以訪問到,是不是有點繼承的味道了。
如果我們再這樣搞一個對象,也這么干,這里是不是就感覺像條鏈一樣。最頂端的對象是Object,也就是說到最后了。我們把這條鏈接方式叫做原型鏈。這也是繼承的依據。
繼承
和傳統的OOP語言來說,JavaScript語言比較蛋疼的是它沒有類這個機制。所以說我們事先js的繼承就從對象角度下手了。我們重點說一下依據原型鏈繼承的。(其他的繼承我就不說了,比如借用父對象的構造函數等,實用性不強)
1.上面所說的實現原型鏈的方法雖然有點繼承的味道了,但是你有沒有發現 實例化xiaoming這個對象的時候調用了Man這個構造函數,但是xiaoming自己的age和name都沒能進行構造,只不過是原型上的屬性而已(其實是Person自己構造的,new Person( 23, "xiaoming" ))。我們其實可以這樣用call和apply這個object原型下面給我們定義好的方法改進下(call和apply方法自己看api說明吧)
function Man(x, y) {
Person.call(this, x, y); //這里你可以這樣理解,this指的是Man,這樣其實就是借用Person構造函數
this.beard = "xxx";
}
我們把Man的構造函數這樣一改,實例化的時候傳參,這樣age和name這兩個屬性就是Man自己構造出來的了,并不會被共享
Man.prototype = new Person( );
Man.prototype.constructor = Man;
var xiaoming = new Man(23, "xiaoming");
這里只是讓Man的原型的構造函數變成原有的構造函數,如果不加這一句的話,那么Man原型的構造函數就變成undefied,因為實例和構造函數并沒有直接關系。這樣一來,原型找不到構造函數,這是非常蛋疼的事情,違反了原型鏈的定義啊。
這邊可能會有人問了,我為什么不自己像胡子beard 那個屬性一樣直接構造呢。
大哥,我這是舉例子,你以為實際的項目中就會有這么兩個屬性嗎。而且這樣不正是繼承的目的嗎
可以少寫很多代碼啊。(說多了都是淚)
但是也是有缺點的:兩次調用父類構造函數(第一次是在創建子類原型的時候,第二次是在子類構造函數內部);子類繼承父類的屬性,一組在子類實例上,一組在子類原型上(在子類原型上創建不必要的多余的屬性,實例上的屏蔽原型上的同名屬性,是不是感覺有點多余了 ,效率低。
2.為了改進這種方法,下面說的這種繼承方式是借助我們偉大的道爺(這個人很厲害,自行百度)的靈感 。這種就是利用一個空函數對象來做一個橋梁.
具體實現方式如下:
function inherits(Child, Parent) {
var F = function () {};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
}
另外在子對象的構造函數中別忘了借用父對象的構造函數哦。(就是那個call或者apply方法)
這里和上面的區別是,子對象的原型現在不是父對象的實例了,變成了空函數對象的實例(父對象不用再創建兩次了,并且子對象的原型上也不會有啥屬性和方法了)。而空函數對象的原型變成了父對象的原型。前面我們說過,有了實例就能找到原型。所以現在子對象原型和父對象原型是就建立關系了。這種方式現在是最穩的方法,也已經被很多框架給寫到源碼里面了。
這里我們就用google closure 關于繼承的兩個api,這邊簡單舉個例子:
Child = function( ){
goog.base(this);
this.height = 12;
}
goog.inherits(Child, Parent);
這里就實現了我們上述實現的,不過封裝起來了而已。
2016年4月1日,北大青鳥東莞金碼學校的老師們參加了嘉華教育集團組織的茶溪谷一日游。在風景優美的東部華僑城茶溪谷,老師們不僅進行了團隊
北大青鳥東莞金碼學校第十屆校友會在報告廳順利舉行,本次校友會主題為為職場加點‘料’,出席本次校友會的嘉賓有:安卓主管方老師
北大青鳥東莞金碼每年都會舉辦文化藝術節,以各種活動形式貫穿其中,讓學員感受到濃濃的文化藝術氛圍,并親自參與到文化節的活動中來,也是
北大青鳥東莞金碼學校不定期組織學員開展精彩的文娛活動,通過K歌比賽、晚會節目表演、藝術節活動,以及平時的文娛表演,讓學員可以通過各種活動展現自
北大青鳥東莞金碼經常組織各種形式的學術活動,包括辯論賽、編程大賽、PPT比賽、知識競賽、學術講座、程序開發比賽等等。讓學員通過參與各
很多學生求職難,不是因為素質不好、能力不行、經驗不夠被刷掉,而是因為簡歷不夠閃!找出寫簡歷的突破口、切入點,才能在HR的篩選過程中脫
1、用很怪異的郵箱名字發送簡歷例如司機投遞簡歷時名字是沒油了或迷路了,年輕人投簡歷用什么徹夜跳舞、狂歡這類的文字,或者帶臟字,等等
一些職業限制因素是我們無法掌控的。新產品發布有可能被經濟不景氣拖累,你的導師在公司重組中失業,你必須在高層另找個新的獲勝者作為導師
大學畢業找工作,你選擇了哪個城市作為自己職業生涯的出發點?最近正值畢業求職季,前程無憂論壇(bbs 51job com)用這個話題帶網友們回憶了往
最近好多人都在問,面臨暑期實習,應該去大公司還是小公司?原以為現在公司名氣大平臺高,但是入職后發現各種問題,好壞公司如何
有了這些法寶,媽媽以后再也不用擔心我加班了~一、產品狗、運營貓的數據處理中心1 infogr am infogr am是一個強大的數據可視化圖表創作
預 備測試環境: AMD 毒龍1 4G OC 1 5G、256M DDR333、Windows2000 Server SP4、Sun JDK 1 4 1+Eclipse 2 1+Resin 2 1 8,
1 字符基礎1 1 單字節字符集(single-byte character set(SBCS))顧名思義,在這種模式下,所有的字符都只用一個字節表示,常見的如,ASC
眾所周知,新站一般排名穩定的時間大概在3個月左右,所以seo教程以新站上線三個月的時間來闡述下外鏈思想,以及如何發外鏈來讓關鍵詞更早的...
DDoS帶來的破壞是巨大的,你無法阻止黑客對你的網站發動DDoS攻擊,除非主動斷開Internet連接。如果我們無法防止這種攻擊,那么,怎樣做才能最大限度地保護我們的企業網絡呢?
橫瀝鎮北大青鳥:打工多年想學技術學什么有前途?來自東莞橫瀝鎮的孟小冬走進東莞北大青鳥校區,講起了他在東莞橫瀝打工的經歷,從18歲就來
初中畢業學啥技術好?在東莞,很多工廠的工人們都只有初中學歷,但是他們仍然有一顆敢于奮斗的心,他們期望通過自己的努力為自己贏得精彩的
春節過后是招聘旺季,對于東莞北大青鳥畢業學生來說,這樣的機遇必須好好把握。
一年一度的災難片來襲,因為要開學啦!同學們,暑假作業完成沒,摸底考試又要來了,是不是感到又彷徨,又緊張?如果說假期是為了放松和調整
時光猶如停留在半年前,我不知道該怎么形容我現在的心情,因為一切都太出乎我的意料了,當初還在猶豫北大青鳥學校學費的時候,還在猶豫北大
女生高考落榜怎么辦?在2016年的今天,上大學已經不再是改變命運的唯一方式,讀職業培訓學校也是一種出路。上職業教育,可以學到一門專業技
眾所周知,隨著互聯網日新月異的發展,隨著網絡的科技發達,電腦的應用成了我們生活中不可的一件物品了,經常在一些貼吧論壇上看到很多人提出這樣的問題,“本人已經成年了,還可以再學習電腦嗎?”“電腦學起來難度大嗎?”“現在學習會不會太晚了”等一系列的問題,其實,成人學習電腦并不算太晚,關鍵看你選擇什么成人電腦培訓班!
1 只在電腦上練習如果面試官要考核你的技術,很有可能會要求你在白板上寫代碼,而不是電腦上。所以,你就不能只在電腦上練習。電腦上的編譯
高考落榜讀大專還是學技術好呢?不少人會有這樣的疑問。就小編看來,如今大學升學率高達90%,高考落榜的學生,通過一些渠道也有大學上。人
“To be,ornot to be:thatis thequestion”(生存還是毀滅:這是一個問題),這是著名的莎士比亞悲劇《哈姆雷特》中的主人公一句非常經典的獨白,也是數百年來經常困擾人們的選擇問題。這段哈姆雷特式問題的臺詞,經常用來形容一個人在猶豫在思考時候的兩難情況,用現代人的說法就是“選擇困難癥”。人們經常糾結于各種選擇,生怕選錯了,就會陷入“藍瘦香菇”的困境。