iT邦幫忙

0

為了轉生而點技能-JavaScript,day17(原型-prototype、自訂原型、新增method

  • 分享至 

  • xImage
  •  

本篇記錄有關prototype的定義,自訂及新增methods的簡單操作。

原型:prototype

在JS裡面,原型也是一個物件,而每個原型的物件都有自己的屬性methods或稱函式

  1. 當原型的methods(函式)有新增時,同樣繼承使用該原型的物件,也會同時新增該函式。
  2. 屬性也同樣繼承,但是屬性的值則可以自訂。
  3. 原型也可以去繼承其他原型的屬性及函式;從a物件去繼承A原型物件,A原型物件再去繼承B原型物件時,流程就是原型鍊。
  4. 要看屬性:a.A或是a.B;要看函式a.A()或是a.B()。

reference type:

        var a = [1, 2, 3];
        console.log(a);

https://ithelp.ithome.com.tw/upload/images/20211208/20143762Ieciayc3Nr.jpg
https://ithelp.ithome.com.tw/upload/images/20211208/20143762xS9NgyN9zJ.jpg

  1. 可以看出a陣列總共有4個屬性:0、1、2、length。
  2. 而Array原型也是從最頂層的Object繼承而來。
  3. [[Prototype]]: Array(0):則是顯示出從原型物件(Array)所繼承的各種屬性。
        a.forEach(function (params) {
            console.log(params);          //1,2,3
        })


primary type:

https://ithelp.ithome.com.tw/upload/images/20211208/20143762kqPSyPNmsH.jpg
圖中的toUpperCase極為從String原型繼承的method。

        var a = 'a';
        console.log(a.toUpperCase());

        var b = new String('b');
        console.log(b);
        console.log(b.toUpperCase());

b是物件型別,但是他依然是繼承於String原型,所以String的method依然可以使用。
https://ithelp.ithome.com.tw/upload/images/20211208/201437625ojRsZNmYI.jpg

延伸應用:

        var b = new String('baby');
        console.log(b);

        String.prototype.lasttext = function (params) {
            return this[this.length - 1]
        }
        console.log(b.lasttext());
  1. b就是物件,屬性及原型如下圖:
    https://ithelp.ithome.com.tw/upload/images/20211208/20143762UyVDQh1XGo.jpg

  2. 利用新增String原型的method一個屬性lasttext,且值為一個函式;因為JS除了primary tpye都是物件,這邊設計要取最後一個字,所以length - 1。

  3. console.log(b.lasttext()):y。



自訂原型:利用建構函式

自訂原型的屬性:

利用建構子將函式轉為新物件並供後續使用。

        function BluePrintDog(name, color, size) {
            this.name = name;
            this.color = color;
            this.size = size;
        }

        var DogA = new BluePrintDog('TOM', 'black', 'small');
        console.log(DogA);

https://ithelp.ithome.com.tw/upload/images/20211208/20143762dgcjiI5F8U.jpg

DogA從BluePrintDog建構式取得3個屬性。


自訂原型的methods(函式):

  1. 因為在JS函式也是物件,所以利用 BluePrintDog.prototype.eat的方式在BluePrintDog上的新增methods。
  2. prototype在函式上是屬性。
        function BluePrintDog(name, color, size) {
            this.name = name;
            this.color = color;
            this.size = size;
        }

        BluePrintDog.prototype.eat = function () {
            console.log('乖乖吃')
        }

        var DogA = new BluePrintDog('TOM', 'black', 'small');
        console.log(DogA);
        DogA.eat();

https://ithelp.ithome.com.tw/upload/images/20211208/201437620z6xIYzbUh.jpg


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言