0

そこで、オブジェクトを拡張してオブジェクト内のエントリ数をカウントする関数を作成したので、次のように使用できます。

test = {"foo": "bar", "baz": 7, "darth": "maul"}

test.count()
=> 3

私はそのようにコードを書きました:

Object.prototype.count = function() {
  var count = 0, key;
  for (key in this) {
    if (this.hasOwnProperty(key)) {
      count++;
    }
  }
  return count;
}

これは、プロトタイプを使用して拡張する最初の試みであり、jQuery.js 内からこのエラーが発生しています。

Uncaught TypeError: Object function () {
  var count = 0, key;
  for (key in this) {
    if (this.hasOwnProperty(key)) {
      count++;
    }
  }
  return count; 
} has no method 'replace'

cssスタック トレースは、jQuery オブジェクト onLoad で呼び出した場所を示しています。

$img.css({left: 20, top: 50});

その行に特定の何かがあるとは思いませんが、提供するのは良いかもしれないと思いました.

ここで私が間違っていることはありますか?

4

1 に答える 1

2

ネイティブ型のプロトタイプを拡張することがなぜ悪い考えであるかについての教訓。:)

のどこかでjQuery、 というプロパティの存在について汎用オブジェクトをテストし、countそれを文字列として扱っています。そのプロパティが常に存在するようになったので、それは見つかりましたが、(予想どおり) 文字列ではなく、コードが壊れました。

于 2012-07-25T18:09:58.553 に答える