<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 21:58:24
        文檔

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

        js的繼承方法小結(jié)(prototype、call、apply)(推薦):js的原型繼承 -- prototype 先說下什么是prorotype? js中,俗話說一切皆對象。用new 出來的都是函數(shù)對象;否則就是普通對象 函數(shù)對象都有prototype(原型對象);而普通對象則只有__proto__(原型指針) 函數(shù)對象的一個特點(diǎn):可以實(shí)現(xiàn)不同類之間的方法
        推薦度:
        導(dǎo)讀js的繼承方法小結(jié)(prototype、call、apply)(推薦):js的原型繼承 -- prototype 先說下什么是prorotype? js中,俗話說一切皆對象。用new 出來的都是函數(shù)對象;否則就是普通對象 函數(shù)對象都有prototype(原型對象);而普通對象則只有__proto__(原型指針) 函數(shù)對象的一個特點(diǎn):可以實(shí)現(xiàn)不同類之間的方法

        js的原型繼承 --  prototype

        先說下什么是prorotype?

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

        以下是關(guān)于prototype繼承需要注意的點(diǎn):

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

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

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

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

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

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

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

        4.創(chuàng)建 boys 實(shí)例時無法向父類的構(gòu)造函數(shù)傳參,也就是無法初始化 source屬性。因此:只能創(chuàng)建實(shí)例之后再修改父類的屬性。

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

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

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

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

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

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

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

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

        //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()方法實(shí)現(xiàn):
         function Girls(name, sex) {
         Personal.apply(this, [name, sex]);
         //Person.apply(this,arguments); //跟上句一樣的效果,arguments 
         //Print.apply(this,arguments); //還可以實(shí)現(xiàn)繼承多個父類,但是原型 prototype只能繼承一個父類!!!切記
         }
         const girls1 = new Girls('Lucy', '女')
         girls1.say();
         
        //call()實(shí)現(xiàn):
         function Boy(name, sex) {
         Personal.call(this, name, sex);
         }
         const boys = new Boy('Barry', '男');
         boys.say() //
        

        總結(jié):

        1. prototype可以動態(tài)的給對象增加屬性和方法。
        2. 可以實(shí)現(xiàn)子類繼承父類,擁有父類的屬性和方法。
        3. call和apply的區(qū)別,在于參數(shù)的不同。
        4. call和apply,理解為在子類的運(yùn)行環(huán)境中執(zhí)行父類的方法和屬性。
        5. call和apply可以實(shí)現(xiàn)一個子類繼承多個父類,但是prototype只能有一個父類。

         以上所述是小編給大家介紹的js的繼承方法小結(jié)詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        js的繼承方法小結(jié)(prototype、call、apply)(推薦):js的原型繼承 -- prototype 先說下什么是prorotype? js中,俗話說一切皆對象。用new 出來的都是函數(shù)對象;否則就是普通對象 函數(shù)對象都有prototype(原型對象);而普通對象則只有__proto__(原型指針) 函數(shù)對象的一個特點(diǎn):可以實(shí)現(xiàn)不同類之間的方法
        推薦度:
        標(biāo)簽: call js 繼承
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: a级毛片高清免费视频| 免费看国产成年无码AV片| 日本高清免费不卡视频| 亚洲一区二区三区在线网站| 最近中文字幕免费完整| 亚洲gv白嫩小受在线观看| 无码少妇精品一区二区免费动态| 亚洲人成无码网站| 搡女人免费免费视频观看| 亚洲爆乳无码一区二区三区| 七色永久性tv网站免费看| 亚洲宅男永久在线| 国产精品永久免费10000| 亚洲男人av香蕉爽爽爽爽| 免费人成又黄又爽的视频在线电影| 亚洲AV中文无码乱人伦在线视色| 成人a毛片视频免费看| 亚洲精品成人片在线播放| 久久免费视频99| 亚洲国产视频久久| 免费二级毛片免费完整视频| 一个人看的免费高清视频日本| 亚洲精品午夜无码电影网| 97久久免费视频| 亚洲国产成人无码AV在线影院| 免费成人黄色大片| 日韩a级无码免费视频| 亚洲国产日韩在线一区| 国产网站免费观看| 国产又黄又爽又大的免费视频| 蜜芽亚洲av无码精品色午夜| 成年私人影院免费视频网站| 黄网站色视频免费看无下截| 久久久亚洲精品无码| 国内免费高清在线观看| 成人网站免费大全日韩国产| 亚洲欧洲国产视频| 亚洲福利在线播放| 永久免费视频网站在线观看| 特级毛片aaaa免费观看| 亚洲综合在线成人一区|