亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

js的繼承方法小結(prototype、call、apply)(推薦)

2024-05-06 16:50:05
字體:
來源:轉載
供稿:網友

js的原型繼承 --  prototype

先說下什么是prorotype?

  1. js中,俗話說“一切皆對象”。用new 出來的都是函數對象;否則就是普通對象
  2. 函數對象都有prototype(原型對象);而普通對象則只有__proto__(原型指針)
  3. 函數對象的一個特點:可以實現不同類之間的方法繼承
  4. 函數的子類可以共享父類的方法,而父類不能想用子類的方法
eg: (prototype的繼承)  //創建父類函數對象   function Personal(name, age) {  this.name = name;   //父類的私有屬性  this.age = age;  this.house = ['北京', '上海'] } Personal.prototype.run = function() {  //給父類原型動態添加方法  alert('原型方法:' + this.name + ' is running!'); } var per = new Personal('小白', 24) per.run() //打印 --> 原型方法:小白 is running!  //創建子類函數對象 function Boy() {} Boy.prototype = new Personal('小黑', 19) //子類繼承父類的所有屬性和方法 Boy.prototype.source = 100      //給子類添加原型屬性 Boy.prototype.printSource = function() { //給子類添加方法  alert(this.name + '的原型方法printSouce打印成績為:' + this.source) //小黑的原型方法printSouce打印成績為:100 } Boy.prototype.run()  //打印 --> 原型方法:小黑 is running! var boys = new Boy() boys.printSource() console.log(boys, '--boys---') //打印 -->19, 小黑, 100 (這里會沿著prototype向上查找到Personal的屬性)

以下是關于prototype繼承需要注意的點:

1.如果父類中有引用類型的屬性:Array,Object等。子類繼承了這些屬性,并嘗試改變的話,會影響到父類的屬性。

//創建另外一個實例1:   var boys1 = new Boy()   boys1.house.push('深圳')//打印這兩個實例:   console.log(boys, boys1)

js,繼承,prototype,call,apply

可以看出來,當屬性為引用類型時,只要有一個實例的屬性做了操作,所有的實例都會受到影響。

2.該方式導致 Boy.prototype.constructor 被重寫,它指向的是 Personal 而非 Boy。因此你需要手動將 Boy.prototype.constructor 指回 Boy。

Boy.prototype = new Personal();Boy.prototype.constructor === Personal; // true// 重寫 Boy.prototype 中的 constructor 屬性,指向自己的構造函數 BoyBoy.prototype.constructor = Boy;

3.因為 Boy.prototype = new Personal(); 重寫了 Boy 的原型對象,所以 printSource 放在重寫原型對象之前會被覆蓋掉,因此給子類添加原型方法必須在替換原型之后(eg是沒有被覆蓋的)。

function Boy() {}Boy.prototype = new Personal();// 給子類添加原型方法必須在替換原型之后Boy.prototype.printSource = function() { console.log('printSource~');};

4.創建 boys 實例時無法向父類的構造函數傳參,也就是無法初始化 source屬性。因此:只能創建實例之后再修改父類的屬性。

const boys = new Boy();// 只能創建實例之后再修改父類的屬性boys.source = 100;

apply()、call()方法的繼承

了解下apply()、call()方法

1.apply()、call()的用法:

obj.call(thisObj, arg1, arg2, ...);obj.apply(thisObj, [arg1, arg2, ...]);

obj是父級,thisObj是子級;第二個參數apply可以接收一個數組,而call只能是每項逐個接收。

2.apply和call 本來就是為了擴展函數的作用域而生的,換句話說就是為了改變this的指向存在的。

3.當一個object沒有某種方法,但是其他的有,我們可以借助call和apply來用其他對象的方法來做操作,也可以傳參數。

//eg:function Personal(name, sex) {   this.name = name;   this.sex = sex;   this.say = function (){    alert('姓名:' + this.name + ';性別:' + this.sex)   }  }  const per = new Personal('Allan', '男')  per.say();  //apply()方法實現:  function Girls(name, sex) {   Personal.apply(this, [name, sex]);   //Person.apply(this,arguments); //跟上句一樣的效果,arguments    //Print.apply(this,arguments); //還可以實現繼承多個父類,但是原型 prototype只能繼承一個父類!?。∏杏? }  const girls1 = new Girls('Lucy', '女')  girls1.say();  //call()實現:  function Boy(name, sex) {   Personal.call(this, name, sex);  }  const boys = new Boy('Barry', '男');  boys.say() //

總結:

  1. prototype可以動態的給對象增加屬性和方法。
  2. 可以實現子類繼承父類,擁有父類的屬性和方法。
  3. call和apply的區別,在于參數的不同。
  4. call和apply,理解為在子類的運行環境中執行父類的方法和屬性。
  5. call和apply可以實現一個子類繼承多個父類,但是prototype只能有一個父類。

 以上所述是小編給大家介紹的js的繼承方法小結詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一中文字幕在线观看| 国产香蕉一区二区三区在线视频| 亚洲最新视频在线| 国产欧美一区二区三区在线看| 狠狠综合久久av一区二区小说| 夜夜躁日日躁狠狠久久88av| 亚洲精品国产精品国自产在线| 亚洲视频专区在线| 中文字幕av一区二区三区谷原希美| 国产成人综合精品在线| 韩国福利视频一区| 国产精品你懂得| 久久久精品日本| 欧美成人精品在线| 久久资源免费视频| 久久久91精品| 国产亚洲欧洲高清一区| 国产午夜精品全部视频在线播放| 欧美一级大片在线观看| 欧美精品999| 92看片淫黄大片欧美看国产片| 国产亚洲精品久久久久久牛牛| 亚洲国产高清自拍| 色香阁99久久精品久久久| 中文字幕亚洲综合久久筱田步美| 久久久久久有精品国产| 欧美一级片免费在线| 亚洲视频国产视频| 午夜免费久久久久| 亚洲电影天堂av| 色偷偷综合社区| 欧美日韩一区二区在线播放| 国产精品第10页| 欧美精品videosex牲欧美| 欧美成人一区二区三区电影| 色综久久综合桃花网| 欧美日韩aaaa| 欧美精品手机在线| 992tv在线成人免费观看| 最好看的2019的中文字幕视频| 91沈先生作品| 欧美亚洲国产精品| 精品亚洲夜色av98在线观看| 国产91精品久久久久久久| 色哟哟网站入口亚洲精品| 亚洲人午夜精品| 懂色av影视一区二区三区| 九九热最新视频//这里只有精品| 福利一区视频在线观看| 久久久久久久久综合| 久久99青青精品免费观看| 色999日韩欧美国产| 日韩中文理论片| 97人洗澡人人免费公开视频碰碰碰| 国产亚洲人成a一在线v站| 亚洲美女又黄又爽在线观看| 日韩国产精品视频| 欧美日韩亚洲91| 久久成人精品视频| 精品国产视频在线| 亚洲精品国产精品自产a区红杏吧| 精品视频在线播放| 国产www精品| 91久久久亚洲精品| 色噜噜国产精品视频一区二区| 欧美日韩精品中文字幕| 日韩av一区二区在线| 国产精品一区=区| 欧美激情一级精品国产| 欧美尺度大的性做爰视频| 最近2019中文字幕第三页视频| 91精品国产乱码久久久久久蜜臀| 久久精品这里热有精品| 欧美—级高清免费播放| 欧美一区二区三区四区在线| 国模私拍视频一区| 中文字幕国产亚洲| 日韩欧美精品在线观看| 欧美一级bbbbb性bbbb喷潮片| 久久久91精品国产| www日韩中文字幕在线看| 一区二区福利视频| 黄色91在线观看| 国产精品h片在线播放| 欧美高清在线视频观看不卡| 美日韩精品免费观看视频| 欧美国产精品人人做人人爱| 国内免费精品永久在线视频| 992tv在线成人免费观看| 91精品在线观看视频| 成人福利网站在线观看| 国内精品免费午夜毛片| 欧美洲成人男女午夜视频| 亚洲香蕉伊综合在人在线视看| 亚洲国产精久久久久久| 亚洲第一偷拍网| 久久久成人精品视频| 成人在线视频网站| 日本成人黄色片| 大量国产精品视频| 久久青草精品视频免费观看| 草民午夜欧美限制a级福利片| 亚洲欧美中文日韩v在线观看| 成人高h视频在线| 亚洲人永久免费| 亚洲国产精久久久久久久| 亚洲精品成人免费| 中文字幕不卡av| 日韩中文在线不卡| 国产精品丝袜白浆摸在线| 国产精品女人久久久久久| 亚洲欧美日韩高清| 亚洲精品98久久久久久中文字幕| 亚洲第一精品自拍| 国产亚洲综合久久| 1769国内精品视频在线播放| 精品国产91久久久| 精品magnet| 深夜福利一区二区| 亚洲午夜av电影| 精品国产福利在线| 成人黄色午夜影院| 在线观看视频99| 在线看欧美日韩| 日韩一二三在线视频播| 91九色国产视频| 亚洲永久在线观看| 欧美日韩亚洲网| 亚洲精品98久久久久久中文字幕| 国内精品久久影院| 亚洲国产日韩欧美综合久久| 国产成人精彩在线视频九色| 97免费中文视频在线观看| 超碰91人人草人人干| 久久成人18免费网站| 日韩人在线观看| y97精品国产97久久久久久| 91精品国产91久久久久久不卡| 欧美整片在线观看| 一区二区亚洲欧洲国产日韩| 奇米成人av国产一区二区三区| 国产精品久久久久av| 亚洲人成电影网站色| 欧洲永久精品大片ww免费漫画| 国产一区二中文字幕在线看| 精品国产视频在线| 在线免费观看羞羞视频一区二区| 久久久久成人网| 久久影视电视剧凤归四时歌| 亚洲一级免费视频| 亚洲一区二区自拍| 欧美国产日韩视频| 在线观看日韩欧美| 日韩黄色在线免费观看| 日韩在线视频网站| 97在线观看视频| 日本欧美国产在线| 欧美肥老太性生活视频| 国产视频精品va久久久久久| 久久亚洲国产精品| 欧美在线视频a| 久久免费视频这里只有精品| 国产精品欧美激情| 成人网中文字幕|