3

Array.prototypeメソッドで拡張して、任意の配列で呼び出すことができることを望んでいました。

>>> [1, 2, 3].customMethod();

しかし、アレイにはプロトタイプがないようです...?

>>> [1, 2, 3].prototype
undefined

ここで何かが足りませんか?


私の実際の問題は他の場所にあるようです。呼び出しは機能します[1, 2, 3].customMethod()が、呼び出しsomeDomElement.childNodes.customMethod()は失敗します。childNodes実際の配列ではありませんか?

childNodes.filter is not a function
4

2 に答える 2

3

prototypeは、のようなコンストラクタ関数のプロパティですArray。存在Array.prototypeしますが、存在しません[1, 2, 3].prototype; Arrayはコンストラクター関数であり、[1, 2, 3]は配列です。

あなたが探しているObject.getPrototypeOf([1, 2, 3])

Object.getPrototypeOfECMAScript5メソッドであるため、すべてのブラウザに存在するとは限りません。__proto__その場合、プロパティにアクセスしてみることができます。つまり、の新しい標準バージョンで[1, 2, 3].__proto__ある古い非標準のものであるか、ES5シムを使用してサポートされている場所を確認することができます。Object.getPrototypeOf__proto__Object.getPrototypeOf

于 2011-07-06T21:37:36.043 に答える
2

DOM NodeListを使用しているようですが、これはJavaScript配列オブジェクトと同じものではありません。

http://blog.duruk.net/2011/06/19/nodelists-and-arrays-in-javascript/は、いくつかの洞察を提供するはずです。

配列のようなオブジェクト(NodeListまたはarguments変数など)から「実際の」JavaScript配列を取得するには、次の.sliceようなメソッドを使用します。

var realArray = Array.prototype.slice.call(someDomElement.childNodes);
realArray.filter()

そして、はい、示されている別の答えのように-.prototypeオブジェクトはコンストラクター関数のプロパティのみであり、インスタンスのプロパティではありません。例えば。Object.prototype存在しますが、({}).prototype未定義です。

于 2011-07-06T21:54:32.203 に答える