JS 12 - 继承方法

大家好!

我们花了两天介绍原型链和原型继承的原理,今天就要介绍继承的方法了。
我们进入今天的主题吧!


Object.create

/* 使用说明 */
Object.create(obj); // {}
Object.create(obj, properties);

如果要让 JS 的原型继承 Ironman 的原型:

function JS(n, d, p) {
    this.name = n;
    this.date = d;
    this.post = p;
    this.subject = 'JavaScript';
}

/* 使 JS.prototype 继承 Ironman.prototype */
JS.prototype = Object.create(Ironman.prototype); // {}
JS.prototype.construtor = JS;

let record;

record = new JS('Felix', '2021-10-15', 30);
record.finish(); // Log: Congratulations!
record; // { name: 'Felix', date: '2021-10-15', post: 30, subject: 'JavaScript', status: true}

因为 JS 继承了 Ironman,因此使用 JS 建立的物件也能执行 finish,但是 finish 其实是位於 Ironman 的原型。

JS.prototype; // {}
Ironman.prototype.isPrototypeOf(JS.prototype); // true

这样就能知道,JS 的原型是空物件,但是内部属性 __proto__ 是指向 Ironman 的原型。


Object.setPrototypeOf

Object.setPrototypeOf(obj, prototype); // obj
function JS(n, d, p) {
    this.name = n;
    this.date = d;
    this.post = p;
    this.subject = 'JavaScript';
}

Object.setPrototypeOf(JS.prototype, Ironman.prototype);

这比 Object.create 更简单了!


extends

或者,也能使用类别函式的 extends 来继承:

class JS extends Ironman {
    constructor() {
        this.name = n;
        this.date = d;
        this.post = p;
        this.subject = 'JavaScript';
    }
}

差不多也到尾声了。
如果对文章有任何疑问,欢迎於下方提问和建议!
我是 Felix,我们明天再见!


<<:  创建App-讯息界面

>>:  Day15 - 建立模板

[Day 26] Android Studio 七日陨石开发:嘘! 我正在监听这个元件

前言 昨天我们设计好UI介面後, 我们有一堆按钮和文字框的"元件", 要让这些元...

[常见的自然语言处理技术] Bag-of-Words Model:简单直观的统计语言模型

前言 当我们要使用机器学习演算法来解决自然语言的问题,我们首先必须将文字进行量化( quantifi...

连续 30 天 玩玩看 ProtoPie - Day 25

看到这篇觉得满实用的,来跟着看一下。 连结: https://www.protopie.io/blo...

从 IT 技术面细说 Search Console 的 27 组数字 KPI (25) :Search Console 可以看到到多少 Ranking Factor 呢?

Search Console 是 Google 用来跟网站经营者沟通对话的报表,呈现 Google ...

# Day 30 Commencement: I open at the close

哇!不知不觉就到第 30 天了,来回顾一下这 30 天的旅程吧! 简单回顾 自己订的铁人赛主题是阅读...