functionMyArray(){Array.apply(this,arguments); } MyArray.prototype =Object.create(Array.prototype, {constructor: {value: MyArray,writable:true,configurable:true,enumerable:true } }); var colors =new MyArray(); colors[0] ="red"; colors.length// 0 colors.length =0; colors[0]// "red"复制代码
可以看到,继承自原生对象Array的MyArray的实例中的length并不能如同原生Array类的实例 一样可以动态反应数组中元素数量或者通过改变length属性从而改变数组中的数据。究其原因就是因为传统方式实现的数组继承是先创建子类,然后在子类基础上扩展父类的属性和方法,所以并没有继承的相关方法,但ES6却可以轻松实现这一点:
classMyArrayextendsArray{constructor(...args) {super(...args); } } var arr =new MyArray(); arr[0] =12; arr.length// 1 arr.length =0; arr[0]// undefined复制代码