- ベストアンサー
JavaScriptの標準仕様で用意されているオブジェクトを拡張してもよいのか?
- JavaScriptの標準仕様で用意されているオブジェクトを拡張してよいのか疑問です。
- 例えば、Arrayオブジェクトを拡張して降順ソートを行うことは仕様に含まれているのか知りたいです。
- また、自作のオブジェクトを作成して拡張する方法もあるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「for~in によるプロパティ列挙でprototypeで拡張したプロパティまで拾う」 という挙動を承知していれば、問題はないと思います。 ----- Array.prototype.descending = function(){ this.sort(function(a,b){return(b-a);}); return this; } var data = [1,2,3,4]; data.descending(); for(var key in data){ console.log(key); // descendingも拾ってしまう } for(var key in data){ if(data.hasOwnProperty(key)){ console.log(key); // descendingは拾わない } } ----- hasOwnProperty - MDC https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty ただ、自分自身が理解していても、他の人が制作されたライブラリを使っていると障害になることもあります。 私は以前、この件で疑問に思うところがあって質問しています。 Array.prototype は使用しない方がいい? | OKWave http://okwave.jp/qa/q5081024.html
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
メモリリークやライブラリ同士の仕様の競合などトラブルは予見されますが 公なサービスや、仕事として受けた納品物ではなく個人的に使う分にはダイレクトに いじってもそんなに迷惑はかかりません。
お礼
ありがとうございます。 確かに、for(i in xxx){}で拾っちゃいますね。 たまに使う事がありますね。注意します。