オブジェクトの拡張の動機は、単純にデータを格納するオブジェクト(Javaの「ハッシュマップ」など)を簡単に処理できるようにすることです。私はhashmap.size()を簡単にしたいです。すべてのオブジェクトが使用できる関数でオブジェクトオブジェクトを拡張する
のは、私のオブジェクトはこのように作られたときに空だったobjDataと呼ばれる性質を持っているとしましょう:
var objData = {};
私のオブジェクトは、このようobjDataにデータを追加することができ、いくつかの方法があります。
this.objData[key1name] = data1;
をと私のオブジェクトには、objDataにアクセスするいくつかのメソッドがあります。
if(this.objData.size() == 0):
もちろん、このようなメソッドはありませんists。今、私はどちらか行うことができるはず
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)
か:だから、Objectオブジェクトを増強するための私のモチベーションだ
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
私はここで何をしないのですか?
。ありがとう。 CrockfordがObjectを増強したときに行った "beget"定義を読みましたが、彼が実際にどのように使用したかを確認するのを忘れました:p – achow
なぜObject.Prototypeを増強できないのですか? – achow
@ highwind7777、それは多くのことが原因である可能性があります。あなたのページを見ることなく、通常、for-inステートメントを使っていくつかのスクリプトを見ることなく、プロパティが* own * for-inステートメントを使って* "反復"する*配列オブジェクト... – CMS