js中如何继承实现Array的子类

试想需要实现一个数组的子类ZeroArray,其构造函数接收一个长度参数n,自动初始化数组元素都为0。
我试图继承原生的Array类型,成员变量通过apply()方法窃取,成员方法则通过原型链引用。代码如下:
functionZeroArray(n){
//构造函数窃取
Array.apply(this);
//自动塞入0元素
for(vari=0;ithis.push(0);
}
}
//利用空函数作为过渡,ZeroArray原型的原型指向Array.prototype
//既建立原型链,又不影响Array.prototype本身,而且防止Array构造函数重复调用两次
varF=function(){};
F.prototype=Array.prototype;
ZeroArray.prototype=newF();
ZeroArray.prototype.constructor=ZeroArray;
那么问题来了:
Object.getOwnPropertyDescriptor(newArray(),"length")
//输出:Object{value:0,writable:true,enumerable:false,configurable:false}
Object.getOwnPropertyDescriptor(newZeroArray(3),"length")
//输出:Object{value:3,writable:true,enumerable:true,configurable:true}
为什么两者的length属性enumerable/configurable会不同?是不是因为Array本质上并不是Object?
幕布斯7119047
浏览 307回答 2
2回答

茅侃侃

你提了个有意思的问题,只指出一点,但解决不了你的问题。继承的话,下面这种写法更好。functionZeroArray(n){//自动塞入0元素for(vari=0;i
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript