如何强制javascript数组从我的自定义对象继承?

如何强制javascript数组从我的自定义对象继承?,javascript,inheritance,Javascript,Inheritance,可以这样做吗-强制标准javascript对象从自定义对象继承?(没有实际用途,只是反问句) 当然,您可以重新分配阵列的原型。但这样做可能会产生可怕的后果 ECMAScript(JavaScript的基础)对数组进行了某些基本假设。我可以想象,ECMAScript的一些实现将禁止重新分配内部类的原型,而其他实现则允许这样做(因为JavaScript的一个同样基本的规则是,任何东西都可以在任何时间的任何地方更改) 但是,这样做会使阵列完全不可预测且不可靠 之所以发生这种情况,是因为禁用了对该属性的

可以这样做吗-强制标准javascript对象从自定义对象继承?(没有实际用途,只是反问句)


当然,您可以重新分配阵列的原型。但这样做可能会产生可怕的后果

ECMAScript(JavaScript的基础)对数组进行了某些基本假设。我可以想象,ECMAScript的一些实现将禁止重新分配内部类的原型,而其他实现则允许这样做(因为JavaScript的一个同样基本的规则是,任何东西都可以在任何时间的任何地方更改)


但是,这样做会使阵列完全不可预测且不可靠

之所以发生这种情况,是因为禁用了对该属性的修改(我认为这是ECMAScript 5规范对本机对象的要求,但找不到任何证明)。在运行此查询的chrome中:

     Object.getOwnPropertyDescriptor(Array, 'prototype')
显示属性的描述符

     Object {
       value: Array[0], 
       writable: false, 
       enumerable: false,
       configurable: false
     }

你不能。为什么不直接将属性添加到
Array.prototype
?基本上也会有同样的效果。@skint:在JavaScript中扩展内置对象通常被认为是个坏主意,不是吗?诚然,这个想法在数量级上更糟糕。你可以只看一眼,就知道
数组。prototype
是不可写的。因此,理论上这是可能的,但您必须首先检查属性的配置。Felix Kling:虽然在ECMAScript 5中是这样,但在ECMAScript 3中不一定是这样,ECMAScript 3(遗憾的是)仍然安装在大量机器上。@MikeHofer:不,最佳实践是定义一个整体战略,作为一个整体合理地协同工作。这可能涉及扩展本机原型,也可能不涉及。一个不好的做法是使用各种策略,当它们一起使用时,会产生bug。我问这个问题不是因为我想更改数组,我是在再次阅读abt继承,这只是一个反问。。我假设javascript中的任何对象都可以更改父对象,对吗?在早期版本的ECMAScript中,是的。从ES 5开始,这不再是事实。
     Object {
       value: Array[0], 
       writable: false, 
       enumerable: false,
       configurable: false
     }