JS 17 - 继承和浏览器的小问题

大家好!

昨天我们成功使用建构式建立一个新物件。
今天我们要实作的就是,在物件原型中新增共用方法。


继承

我们在 JS 12 提到了继承方式,但是这些方式都是直接指向原型,也就是继承所有的原型方法。

当然,我们也能只共用单一原型方法:

Felix.prototype = {
    concat: Array.prototype.concat,
    indexOf: Array.prototype.indexOf,
    push: Array.prototype.push,
    slice: Array.prototype.slice,
    sort: Array.prototype.sort,
    splice: Array.prototype.splice
};

还能更简单:

const arr = [];
Felix.prototype = {
    concat: arr.concat,
    indexOf: arr.indexOf,
    push: arr.push,
    slice: arr.slice,
    sort: arr.sort,
    splice: arr.splice
};

宣告空阵列是为了避免 [].concat 等用法,因为这会直接建立一个新阵列。


小问题

试试建立一个新物件:

/* 请使用基於 Chromium 的浏览器 */
new Felix('body'); // [body]

怎麽会这样?明明没有完全继承阵列的原型,怎麽会回传阵列呢?
其实,只要有下列属性,基於 Chromium 的浏览器就会视物件为阵列:

  1. lengthnumber
  2. splicefunction
const a = {
    length: 0,
    splice: function () {}
};

a; // [ length: 0, splice: function () {} ]
Array.isArray(a); // false

不过,本质上仍是物件就是了。


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


<<:  Day 17:上架 Google Play

>>:  【後转前要多久】# Day17 BootStrap - 介绍、导入

[DAY 28] 用google sheet 做简易UI介面(3/3)

题库一个人不容易维护 如果想要多人共用试算表 就会怕有些人动到你设定好的格式 此时可以选择保护工作表...

第54天~

这个得上一篇:https://ithelp.ithome.com.tw/articles/10260...

[重构倒数第16天] - 选择套件给我好好选啊!

前言 该系列是为了让看过Vue官方文件或学过Vue但是却不知道怎麽下手去重构现在有的网站而去规画的系...

Day 19 - 续谈"产业价值链"资讯研究

延续上一篇谈了产业研究分析, 你若是看完DIGITIMES黄社长的短篇,  你一定会发觉他常常提到...

[Day11] 在 GCP 上建立 VM 与布署 API 程序

今天我们要来介绍如何在 GCP 上建立 VM 并布署我们的 API 程序。 建立 VM 首先点选功能...