当前位置: 代码迷 >> JavaScript >> 将新数组分配给NodeList.prototype
  详细解决方案

将新数组分配给NodeList.prototype

热度:56   发布时间:2023-06-05 15:59:14.0

当我将NodeList.prototype设置为Array object时,为什么不能继承数组Array object和方法NodeList.prototype = new Array; 我可以使用我的自定义构造函数原型来做到这一点吗? 为什么首先a对象不继承阵列的方法和aa呢? 欢迎对此进行任何解释或博客文章链接。

function A(a) {
 this.a = a;
}

A.prototype.b = 'b';

var a = new A('a');

A.prototype = new Array; // aa instance will now have map, filter, some ...

var aa = new A('aa');

它不起作用,因为原型链是在构建时设置的。 调用A.prototype = new Array; 只会影响之后创建的实例。

要在实例化对象后更改其原型,可以使用

最后,请注意,在您的示例中,您将消除现有的原型,因此A所有新实例将不具有原始的b: "b"属性。

更改本机对象(例如NodeList)的原型总是有风险的。 它可能会或可能不会。 扩展原型或扩展实际对象要好得多。

NodeList.prototype.map = Array.prototype.map;
// or:
someNodeList.map = Array.prototype.map;

以示例为例:创建新对象时,它将采用构造函数的原型并将其引用存储到其__proto__属性。 因此,如果完全替换某些构造函数的原型,它将仅影响新创建的对象,因为它们将引用新的原型。

  相关解决方案