2012-03-07 13 views
0

両方のtypeof document.querySelectorAll('a')document.getElementsByTagName('a')オブジェクトあるので、私は、なぜ私がこのようにメソッドを追加することはできません。Nodelist/HtmlColectionの新しいメソッドをプロトタイプで追加するには?

 Object.prototype.method = function(){ alert(this); } 

しかし、この作品:

 a = document.getElementsByTagName('a'); 
     a.__proto__.__proto__.method = function(){ alert(this); } 
     a.method();//object HTMLCollection 

私が行う、a.__proto__ == a.constructor.prototypeを考えましたそれ?

+2

これはあなたにとって役に立ちます:http://perfectionkills.com/whats-wrong-with-extending-the-dom/ –

+0

'document.querySelectorAll( 'a')。constructor.name'は' 'NodeList ' '。それはあなたが 'NodeList.prototype.method'に直接割り当てることができることを意味し、期待通りに動作します(まともなブラウザでは) – clockworkgeek

答えて

0

Object.prototypeを使用することができます。しかし、私はそれを台無しにすることをお勧めしません。

instance_of_my_object = document.getElementsByTagName( 'a');は、オブジェクトの単一インスタンスです。この場合、instance_of_my_objectはNodeListです。
instance_of_my_object.method = ...は、この単一インスタンスのNodeListにメソッドまたは変数を付加します。

クラスのすべてのインスタンスにメソッドをアタッチする場合は、プロトタイプを使用できます(className.prototype.myMethod = function()...)。

関連する問題