Object の拡張に対する私の動機は、単純にデータを格納することを目的としたオブジェクト (Java の「ハッシュマップ」など) を簡単に処理できるようにしたいということです。hashmap.size()を簡単にやりたい。
私のオブジェクトには、次のように作成されたときに空だった objData というプロパティがあるとしましょう:
var objData = {};
私のオブジェクトには、次のように objData にデータを追加できるメソッドがいくつかあります。
this.objData[key1name] = data1;
また、私のオブジェクトには、objData にアクセスするいくつかのメソッドもあります。
if(this.objData.size() == 0):
もちろん、そのような方法は存在しません。これが、Object オブジェクトを拡張する私の動機です。
Object.prototype.getOwnPropertyCount = function ( ) {
var count = 0;
for(var item in this) {
if (this.hasOwnProperty(item)) {
count += 1;
}
}
return count;
};
これで、次のいずれかを実行できるはずです。
if (this.objData.getOwnPropertyCount() == 0)
また:
if(!objData.getOwnPropertyCount())
しかし、実際には、私が書いたコードとはまったく関係のないページを読み込もうとすると、エラーが発生します。Google マップ API の main.js でエラーがスローされます。ブードゥー。
そこで、Object.prototype ではなく実際のオブジェクトを拡張するように拡張を変更します。
Object.getOwnPropertyCount = function ( ) {
//calculate the count
return count;
};
そして今、Firefoxで次のエラーが発生します。
this.objData.getOwnPropertyCount is not a function
ここで何が欠けていますか?