關於JavaScript中繼承的深入理解
JavaScript中我們可以藉助原型實現繼承。
例如
function baz(){="";}function foo(){}otype=new baz();var myFoo=new foo();;
這樣我們就可以訪問到baz裏的屬性oo啦。在實際使用中這個樣不行滴,由於原型的共享特點(數據保存在了堆上),
所有實例都使用一個原型,一但baz的屬性有引用類型就悲劇了,一個實例修改了其他實例也都跟着變了wu
自然就有了組合式繼承
function baz(){="";}=function(){}function foo(){(this);//第二次調用}otype=new baz();//第一次調用var myFoo=new foo();;;
這樣就會有一個問題,代碼裏也表明出來了,baz會被調用兩次,身爲處女座的怎麼可以允許呢..
插一句,第二種方式就不用出現第一種方式的問題嗎?答案是不會的。
原因是屬性的查找是先從對象自身開始,沒找到纔會去原型中去找,call時就把屬性給繼承了。
再插一句,那這樣只使用call繼承不就行了嗎?如果不使用原型這個是可行的,但是作爲處女座怎麼能不使用原型呢,
在原型上方法是共享的,這樣性能就好了很多呀。
寄生組合式繼承
__extends=function (p,c){function ctor(){tructor=c;//賦值構造函數}otype=otype;otype=new ctor();}function baz(){=[1];}=function(){}__extends(baz,foo);function foo(){(this);}var myFoo=new foo();;;
這樣不但解決了兩次調用的`問題,還解決了對象調用構造函數時調用的是真實的創建對象的函數而不是原型鏈上其他的構造函數。
代碼裏有表明。
構造函數是原型對象上的一個屬性,是對象的創建者。由於我們的原型屬性被從新賦值了所以構造函數時繼承來的。
這裏要說一下,對象是怎樣創建,也就是new都幹了些什麼。
例如:
var a=new b();
其實是這樣的,a={};創建了一個給a,然後(a);call裏初始化a,在call之前還有一步,就是a的內部原型對象
設置爲b的原型屬性指向的原型對象。原型上有構造函數屬性,構造函數用來創建對象分配內存控件。
大概就這些...看看時間也不早了,碎吧,保持平和的心態切勿浮躁,努力去改變明天,希望一切都會慢慢變好。
相關文章
-
深入理解Javascript的繼承和原型鏈
在上一篇文章中,介紹了原型的概念,瞭解到在javascript中構造函數、原型對象、實例三個好基友之間的關係:每一個構造函數都有一個“守護神”——原型對象,原型對象心裏面也存着一個構造函數的“位置”,兩情相悅,而實例呢卻又 -
深入理解Javascript中的this關鍵字
文章主要介紹了深入理解Javascript中的this關鍵字,本文講解了方法調用模式、函數調用模式、構造器調用模式、apply調用模式中this的不同之處,需要的朋友可以參考下,就跟隨本站小編一起去了解下吧,想了解更多相關信息請 -
javascript中js閉包的深入理解
閉包(closure)是Javascript語言的一個難點,也是它的特色,很多高級應用都要依靠閉包實現。本文是本站小編搜索整理的關於javascript中js閉包的深入理解,給大家做個參考,希望對大家有所幫助!想了解更多相關信息請持續關注我 -
關於深入理解JavaScript中的對象的介紹
JavaScript是一種面向對象編程(OOP)語言。一種編程語言可以被稱爲面向對象的,它爲開發者提供了四種基本功能:封裝 - 存儲相關的信息,無論是數據或方法,還是對象 聚合 - 存儲一個對象到另一個對象的內部 繼承 - 類的能力依 -
深入理解javaScript中事件驅動
javascript中的事件驅動是通過 鼠標或熱鍵 的動作引發的 主要事件如下:1、鼠標單擊事件 onclick通常用於如下控件:button 按鈕對象checkbox 複選框或檢查列表 --配合onclick單擊事件,通常用於全選效果radio 單選按紐rese -
理解JavaScript中的封裝與繼承特性
JavaScript中的封裝封裝簡單地說就是讓外界只能訪問對象的共有變量和函數,隱藏細節和數據。js中有三種方法創建對象,分別爲門戶大開型、用命名規範區分私有變量、閉包創建真正的私有變量三種。1.門戶大開型,是實現對 -
淺談javascript深入理解js閉包
一、什麼是閉包?“官方”的解釋是:所謂“閉包”,指的是一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。相信很少有人能直接看懂這句話,因爲他描述的太學術。我想用 -
深入理解Javascript中自執行匿名函數
格式:(function(){//代碼})();解釋:這是相當優雅的代碼(如果你首次看見可能會一頭霧水:)),包圍函數(function(){})的第一對括號向腳本返回未命名的`函數,隨後一對空括號立即執行返回的未命名函數,括號內爲匿名函數的參數。來個 -
關於javascript 原型鏈維護和繼承詳解
1、實習學生工作認真負責,虛心好學,在業務緊迫時加班加點毫無怨言。在工作中能夠主動地學習和請教別人,比較仔細認真,能夠完成指導老師和領導安排的工作任務。遵守公司勞動紀律,出勤率高,與同事相處和睦,能融入團隊合作共事, -
有關深入理解JavaScript中的並行處理的介紹
團結友善演講稿團結友善是處理人與人,人與社會關係的原則和準繩。人是社會的人,彼此必然發生各種關係,而處理彼此關係必須從好心出發,團結友善。培養團結友善的道德精神。首先,認識到團結的力量。團結能產生個人無法產