为了转生而点技能-JavaScript,day17(原型-prototype、自订原型、新增method

本篇记录有关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


<<:  Autofac 如何协助 .NET Core MVC 做 Dependency Injection- 图解概述

>>:  【从零开始的 C 语言笔记】番外篇-注解

Day-04 Python 的 Gradient 计算

在开始使用 Framework 之前,我们还是得先看看有没有办法利用纯手工的方式,先来解决一些基本...

[Day0] 前言

嗨!我是莉莉,目前是个软件工程师。去年因为公司内部任务接触到和资安相关的议题,开始对资讯安全感兴趣、...

10. STM32-SPI介绍

SPI介绍 SPI(Serial Peripheral Interface)是主从式同步串列通讯,可...

Day1 阿里云崛起

前言: 谈到Alibaba(阿里巴巴集团),最为人所知的印象是它在电商产业的龙头地位。然而近几年它在...

[Day28] 平常用不到但又常常需要的缩网址+QRcode产生器

写在前面 除了 Day 01 的 Tobymini 页面管理,可以和同事之间互相分享网页之外, 有时...