Javascript 将新数组分配给NodeList.prototype

Javascript 将新数组分配给NodeList.prototype,javascript,dom,Javascript,Dom,当我像这样将NodeList.prototype设置为array object时,为什么不能继承数组道具和方法- NodeList.prototype=新数组我可以用我的自定义构造函数原型来实现吗?为什么第一个a对象不继承数组方法而aa继承? 欢迎对此进行任何解释或博客链接 function A(a) { this.a = a; } A.prototype.b = 'b'; var a = new A('a'); A.prototype = new Array; // aa instan

当我像这样将
NodeList.prototype
设置为
array object
时,为什么不能继承数组道具和方法-
NodeList.prototype=新数组我可以用我的自定义构造函数原型来实现吗?为什么第一个
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=新数组将仅影响在此之后创建的实例

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


最后,请注意,在您的示例中,您正在删除现有原型,因此
A
的所有新实例都不会具有原始
b:“b”
属性。

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

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

举个例子:当你创建一个新的对象时,它会获取构造函数的原型并存储对它的
\uuuuu proto\uuuu
属性的引用。因此,如果完全替换某些构造函数的原型,则只会影响新创建的对象,因为它们将引用新原型。

正确地操作,而不是使用原型<代码>[].map.call(列表,函数(…){…})等等。我知道,但我需要了解发生了什么,这是如何工作的。你试图做一些你不应该做的事情,而浏览器却在说“不”。你可能只想让他这样做。我认为您错过了
NodeList.prototype=new数组零件。