ES6类继承内置类
问题1. 为什么不是对象而是数组
问题2. 为什么有3个空值,后面a,b又是什么
问题3. 继承了内置类,就想到与new内置类的吗,比如以下代码就相当于new Array()
class A extends Array {
constructor(a, b, c) {
super(c)
this.a = a
this.b = b
}
}
const arr = new A(1, 2, 3)
console.log(arr);
console.log(typeof arr, Array.isArray(arr), arr[2]);
我想知道其中详细原理
望采纳!!!!点击回答右侧采纳即可采纳!!!
1.Array 类是一种特殊的对象,它的实例是一个具有数组功能的对象。在 JavaScript 中,数组是一种特殊的对象,它的实例可以同时具有数组的功能和对象的功能。
2.在类的构造函数中,super() 函数调用了 Array 类的构造函数,并且把参数 c 传递给了 Array 类的构造函数。因此,new A(1, 2, 3) 实际上等价于 new Array(3)。
3.在继承了内置类之后,可以使用 new 操作符来创建这个类的实例。例如, new A(1, 2, 3) 等价于 new Array(1, 2, 3)。
es6可以继承内置类,从而为添加一些新的方法和属性,比如继承内置数组类,内置字符串类等,这里就是个继承内置数组的例子。
继承后的类A的构造方法有3个参数,a b c其中c是数组的长度,通过super方法把数组长度c传入到内置数组的构造方法中。
因为是继承,所以A也是个数组类,放通过new创建对象时,也一定是一个数组。
望采纳!!!!!
ES6中的类和对象、继承
讲的很详细
https://www.cnblogs.com/dhui/p/12981398.html
问题1. 你继承了数组那你肯定是数组的子类,所以你可以说是数组
问题2. super(c)就是初始化了父类Array,传了一个3进去,就是相当于new Array(3) 是一个长度为3的数组 ,然后额外给自己初始化了a和b属性
问题3. 与new Array()相比 你多了a和b属性