您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)繼承用法怎么用”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
JavaScript是一種直譯式的腳本語言,其解釋器被稱為JavaScript引擎,是瀏覽器的一部分,JavaScript是被廣泛用于客戶端的腳本語言,最早是在HTML網(wǎng)頁上使用,用來給HTML網(wǎng)頁增加動(dòng)態(tài)功能。
百度百科對繼承的解釋是:繼承是指一個(gè)對象直接使用另一對象的屬性和方法。
(話說百科對于計(jì)算機(jī)概念的繼承的解釋也太簡略了)
繼承的好處,優(yōu)點(diǎn)學(xué)過面向?qū)ο蟮耐瑢W(xué)都知道,就不贅述了。
javascript中的繼承有三種(不同的書上對這三中的名稱翻譯都不一樣,我按照我的理解來命名吧):
a.構(gòu)造函數(shù)繼承(類式繼承,組合繼承,偽經(jīng)典繼承)
b.原型繼承
c.原型賦值(遍歷)繼承(寄生式繼承)
所謂的構(gòu)造函數(shù)繼承,就是通過創(chuàng)建一個(gè)新對象,調(diào)用父類構(gòu)造函數(shù)實(shí)現(xiàn)的一種繼承;
(知識(shí)點(diǎn):函數(shù)對象的原型會(huì)有一個(gè)屬性叫constructor, constructor實(shí)際指向的是這個(gè)函數(shù))
function person(name){ this.name = name; } extend(author, person); function extend(subclass, superclass){ var f= function(){}; f.prototype = superclass.prototype;//f.prototype.constructor = superclass subclass.prototype = new f();//這里調(diào)用的實(shí)際上是superclass(),這樣subclass.prototype.construcor = superclass subclass.prototype.constructor = subclass;//將subclass的構(gòu)造函數(shù)改寫為正常的自身的構(gòu)造函數(shù) }
我們知道javascript在引用一個(gè)對象的屬性時(shí),首先會(huì)去讀這個(gè)對象是否有這個(gè)屬性,如果沒有會(huì)繼續(xù)看這個(gè)對象的原型是否有這個(gè)屬性;
var person ={} var author = clone(person); function clone(obj){ function F(){}; F.prototype = obj; return new F; }
clone函數(shù)的作用就是把父類的所有成員都給了新對象的prototype,成為了新對象prototype的成員,因此子類在引用一個(gè)父類屬性時(shí),都能在prototype中找到,但是這種方式繼承是的所有克隆出來的對象都共享每個(gè)屬性和方法的唯一實(shí)例(因?yàn)槎际峭ㄟ^原型讀?。?,只有在直接設(shè)置了某個(gè)克隆出來的對象的屬性和方法(變?yōu)閷ο螵?dú)立屬性),情況才會(huì)有變化。
這種賦值比原型賦值好的一點(diǎn)在于它控制繼承的范圍
var person = {}; augment(author, person); //參數(shù)最少兩個(gè),超過兩個(gè)則表示指定要繼承的成員 function augment(receivingclass, givingclass){ if(arguments[2]){ for(var i=2;i<arguments.length;i++){ receivingclass.prototype[arguments[i]] = givingclass.prototype[arguments[i]]; } } else{ for(methodname in givingclass.prototype){ receivingclass.prototype[methodname] = givingclass.prototype[methodname]; } } }
這種方式比較適用于var obj這樣定義的對象,而不是用函數(shù)來定義的對象,如果使用函數(shù)定義的對象,同時(shí)又要指定繼承的成員,別忘了constructor
“Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)繼承用法怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。