原型以及繼承方式

1.原型概念:

<!-- 每個(gè)函數(shù)都有一個(gè)原型屬性 prototype 是一個(gè)指針指向一個(gè)對(duì)象

? ? ? ? ?用途是包含可以由特點(diǎn)類型的所有實(shí)例共享的屬性和方法 -->

? ? <script>

? ? ? ? function Person(name,age){

? ? ? ? ? ? this.name = name;

? ? ? ? ? ? this.age = age;

? ? ? ? ? ? this.eat = function(){

? ? ? ? ? ? ? ? document.write(`${name}${age}會(huì)吃飯`)

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? Person.prototype.eat = function (){

? ? ? ? ? ? document.write('姓名:${this.name}年齡:${this.age}會(huì)吃飯')

? ? ? ? }

? ? ? ? let p1 = new Person('zhangsan',20)

? ? ? ? let p2 = new Person('lisi',30)

? ? ? ? p1.eat()

? ? ? ? p2.eat()

? ? </script>

2.原型方法去除空格:

<script>

? ? ? ? /* function clearSpace(){

? ? ? ? } */

? ? ? ? /* 去除前面空格 */

? ? ? ? String.prototype.clearQSpace = function (){

? ? ? ? ? ? /*? ? ?return this.replace(/^\s+/,''); ?去除字符串前面空格

? ? ? ? ? ? return this.replace(/\s+$/,''); ? 去除字符串后面空格

? ? ? ? ? ? return this.replace(/^\s+|\s+$/g,''); ? ? 去除字符串中間空格? ? */



? ? ? ? ? ? return this.replace(/\s/g,''); ? ? ?/* 去除全局所有空格 */

? ? ? ? }

? ? ? ? let nStr = ' ? ? abc'.clearQSpace();

? ? ? ? console.log(nStr);

? ? </script>

3.面向?qū)ο笾^承:

<script>

? ? ? ? function Person(name,age){

? ? ? ? ? ? ?this.name = name;

? ? ? ? ? ? ?this.age = age;

? ? ? ? }

? ? ? ? let p1 = new Person('zhangsan',30)


? ? ? ? function Student (){

? ? ? ? }

? ? ? ? /* instance of 來(lái)判斷這個(gè)實(shí)例()p1是不是這個(gè)構(gòu)造函數(shù)(Person)實(shí)例化出來(lái)的對(duì)象 */

? ? ? ? console.log(p1 instanceof Student);

? ? ? ? /* 萬(wàn)物皆對(duì)象 */

? ? ? ? console.log(p1 instanceof Object);

? ? </script>

4.原型鏈實(shí)例化繼承:

<script>

? ? ? ? function Person(){

? ? ? ? ? ? this.head = 1;

? ? ? ? ? ? this.foot = 2;

? ? ? ? }

? ? ? ? function Student(name,no){

? ? ? ? ? ? this.name = name;

? ? ? ? ? ? this.no = no;

? ? ? ? }

? ? ? ? /* 讓學(xué)生類 ? 繼承 ?人類的 屬性 */

? ? ? ? Student.prototype = new Person();

? ? ? ? Student.prototype.constructor = Student;

? ? ? ? let stu1 = new Student();

? ? ? ? console.log(stu1);

? ? ? ? /* console.log(stu1.head);

? ? ? ? console.log(stu1.foot); */

? ? </script>

原型鏈實(shí)例化繼承練習(xí):

<script>

? ? ? ? /* 寫一個(gè)類 Car color price 屬性 */

? ? ? ? /* 類 BMW 繼承Car的所有屬性 并實(shí)例化BMW這個(gè)類

? ? ? ? ? ?寫個(gè)方法可以把 color 和 price 打印到頁(yè)面上 */

? ? ? ? function Car(){

? ? ? ? ? ? this.color = '藍(lán)色';

? ? ? ? ? ? this.price = '1000w';

? ? ? ? }

? ? ? ? function BMW(){


? ? ? ? }

? ? ? ? BMW.prototype = new Car();

? ? ? ? BMW.prototype.constructor = BMW;

? ? ? ? let BMW1 = new BMW();

? ? ? ? console.log(BMW1.color);

? ? ? ? console.log(BMW1.price);


? ? </script>

5.直接繼承原型鏈:

<script>

? ? ? ? function Person(){

? ? ? ? ? ? /* this.head = 1 ;

? ? ? ? ? ? this.foot = 2 ; */

? ? ? ? }

? ? ? ? Person.prototype.head = 1;

? ? ? ? Person.prototype.foot = 2;

? ? ? ? let p1 = new Person

? ? ? ? function Student(){

? ? ? ? }

? ? ? ? /* Student 想要繼承Person的屬性 */

? ? ? ? /* 直接繼承 prototype*/

? ? ? ? Student.prototype = Person.prototype;

? ? ? ? let stu1 = new Student();

? ? ? ? /* console.log(stu1.head);

? ? ? ? console.log(stu1.foot);

? ? ? ? console.log('stu1',stu1); */

? ? ? ? /* 缺點(diǎn):

? ? ? ? ? ?任何對(duì)Student.prototype的修改,都會(huì)反映到Person.prototype */

? ? ? ? Student.prototype.name = 'zhangsan'

? ? ? ? console.log('p1',p1);

? ? </script>

直接繼承原型鏈練習(xí):

?<!-- 寫一個(gè)類Car color price 屬性 使用直接繼承prototype的方式實(shí)現(xiàn)

? ? ? ? ?類Bmw 繼承car 的所有屬性 并實(shí)例化Bmw這個(gè)類

? ? ? ? ?寫個(gè)方法把 color 和price 打印到頁(yè)面上 ?-->

? ? <script>

? ? ? ? function Car(){

? ? ? ? }

? ? ? ? Car.prototype.color = '白色'

? ? ? ? Car.prototype.price = '100w'

? ? ? ? function Bmw(){

? ? ? ? ? ? this.print = function (){

? ? ? ? ? ? ? ? document.write(`${this.color}--${this.price}`)

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? Bmw.prototype = Car.prototype

? ? ? ? let b1 = new Bmw();

? ? ? ? b1.print()

? ? </script>

6.利用空對(duì)象作為中介繼承以及空對(duì)象封裝:

<script>

? ? ? ? /**

? ? ? ? ?* @param 子類

? ? ? ? ?* @param 父類

? ? ? ? ?* */

? ? ? ? function extend(child, parent) {

? ? ? ? ? ? function f() { }

? ? ? ? ? ? f.prototype = parent.prototype;

? ? ? ? ? ? child.prototype = new f();

? ? ? ? ? ? child.prototype.constructor = child;

? ? ? ? }

? ? ? ? // Object.prototype.foot = 2;

? ? ? ? /*

? ? ? ? ? ? 空對(duì)象屑埋,幾乎不占內(nèi)存

? ? ? ? ? ? 修改Student的prototype對(duì)象弦叶,不會(huì)影響到Person的prototype對(duì)象

? ? ? ? */

? ? ? ? /* 父類 */

? ? ? ? function Person() { }

? ? ? ? Person.prototype.head = 1;

? ? ? ? Person.prototype.foot = 2;

? ? ? ? /* 子類想繼承父類的屬性 */

? ? ? ? function Student() { }

? ? ? ? /* 新建一個(gè)空對(duì)象 */

? ? ? ? // ? ?function f(){}

? ? ? ? // ? ?/* 把父類的原型直接賦值給空對(duì)象的原型上 */

? ? ? ? // ? ?f.prototype = Person.prototype;

? ? ? ? // ? ?/* 把空對(duì)象的實(shí)例化對(duì)象 給到子類的原型上 ?*/

? ? ? ? // ? ?Student.prototype = new f();

? ? ? ? // ? ?/* ★constructor構(gòu)造器都是指向自己的 */

? ? ? ? // ? ?Student.prototype.constructor = Student;

? ? ? ? extend(Student, Person)

? ? ? ? let stu1 = new Student();

? ? ? ? console.log(stu1.foot);

? ? ? ? console.log(stu1);

? ? ? ? /* 不會(huì)影響到Person的prototype對(duì)象 */

? ? ? ? // Student.prototype.age = 30;

? ? ? ? // ? ?let p = new Person();

? ? ? ? // ? ?console.log(p);

? ? ? ? /* 原型鏈就是一層一層向上找的過(guò)程 ?*/

? ? ? ? /* 原型鏈繼承就是利用了上面這種特性 */

? ? ? ? /* 寫一個(gè)類 Car color price 屬性 */

? ? ? ? /* 類 Bmw 繼承Car的所有屬性 并實(shí)例化Bmw這個(gè)類

? ? ? ? 寫個(gè)方法可以把 color 和 price 打印到頁(yè)面上 */

? ? ? ? function Car() {

? ? ? ? }

? ? ? ? Car.prototype.color = '白色'

? ? ? ? Car.prototype.price = '100w'

? ? ? ? // function f(){}

? ? ? ? // f.prototype = Car.prototype;

? ? ? ? // Bmw.prototype = new f();

? ? ? ? // Bmw.prototype.constructor = Bmw;

? ? ? ? extend(Bmw, Car)

? ? ? ? function Bmw() {

? ? ? ? ? ? this.print = function () {

? ? ? ? ? ? ? ? document.write(`${this.color}--${this.price}`);

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? let b1 = new Bmw();

? ? ? ? b1.print();

? ? </script>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末符喝,一起剝皮案震驚了整個(gè)濱河市招狸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啼辣,老刑警劉巖啊研,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鸥拧,居然都是意外死亡党远,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門住涉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)麸锉,“玉大人,你說(shuō)我怎么就攤上這事舆声。” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵媳握,是天一觀的道長(zhǎng)碱屁。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蛾找,這世上最難降的妖魔是什么娩脾? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮打毛,結(jié)果婚禮上柿赊,老公的妹妹穿的比我還像新娘。我一直安慰自己幻枉,他們只是感情好碰声,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著熬甫,像睡著了一般胰挑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上椿肩,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天瞻颂,我揣著相機(jī)與錄音,去河邊找鬼郑象。 笑死贡这,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厂榛。 我是一名探鬼主播盖矫,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼噪沙!你這毒婦竟也來(lái)了炼彪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤正歼,失蹤者是張志新(化名)和其女友劉穎辐马,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體局义,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喜爷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萄唇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片檩帐。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖另萤,靈堂內(nèi)的尸體忽然破棺而出湃密,到底是詐尸還是另有隱情诅挑,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布泛源,位于F島的核電站拔妥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏达箍。R本人自食惡果不足惜没龙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缎玫。 院中可真熱鬧硬纤,春花似錦、人聲如沸赃磨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)煞躬。三九已至肛鹏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恩沛,已是汗流浹背在扰。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雷客,地道東北人芒珠。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像搅裙,于是被迫代替她去往敵國(guó)和親皱卓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 構(gòu)造函數(shù) /* new 先創(chuàng)造了一個(gè)實(shí)例化對(duì)象部逮,并且把this給了實(shí)例化對(duì)象per1 */ let per...
    沖鋒敢死曾小賢閱讀 146評(píng)論 0 0
  • <!DOCTYPE html> Document /** * @param ...
    Esther_12e7閱讀 79評(píng)論 0 0
  • 什么是閉包 在函數(shù)外部能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)娜汁。 通俗理解的閉包: 一個(gè)內(nèi)部函數(shù)引用了外部函數(shù)的變量,外部函...
    小五同學(xué)H閱讀 104評(píng)論 0 0
  • script> /* 父類 */ function Person(){ // this.head ...
    古月夢(mèng)回閱讀 103評(píng)論 0 0
  • 將Student構(gòu)造函數(shù)的原型對(duì)象改為Person構(gòu)造函數(shù)的原型對(duì)象注意點(diǎn): 要想使用Person原型對(duì)象中的屬性...
    仰望_IT閱讀 213評(píng)論 0 1