0

次のコードの出力は次のようになると思います。

one
two
three

コードは次のとおりです:http://jsfiddle.net/5banB/15/

関数コードが出力にも含まれているのはなぜですか?どうすれば解決できますか?

そして答えないでください:3回だけループしてください:)

jsfiddleからのコード:

Object.prototype.example = function(args) {
    var elmnt = this;

    for(var a in args)
    {
        elmnt.innerHTML += args[a] + "<br/>";
    }
}

var numbers = ['one', 'two', 'three'];

document.getElementById("mydiv").example(numbers);

</ p>

出力

one
two
three
function (args) { var elmnt = this; for(var a in args) { elmnt.innerHTML += args[a] + "
"; } }

アップデート:

では、DOM内のすべてのノードなどの拡張機能をどのように記述すればよいでしょうか。推奨される方法は何ですか?

4

2 に答える 2

0

for inループは、オブジェクトの列挙可能なすべてのプロパティをループします。

exampleすべてのオブジェクトにプロパティを追加しました。

ObjectコンストラクターはArrayコンストラクターのプロトタイプチェーン上にあるため、すべての配列にexampleプロパティがあります。

一般的に、for inループを使用している場合hasOwnPropertyは、プロパティがオブジェクト上に直接あり、プロトタイプチェーンを介して継承されていないことをテストするために使用する必要があります。

于 2012-12-17T15:07:48.643 に答える
0

プロトタイプを理解することは、おそらく始めるのに最適な場所です。あなたはおそらくグーグルでたくさんの素晴らしい記事を見つけることができます。

http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/

そのような記事の多くは、Objectsプロトタイプとforループに関数/プロパティを追加することの純粋な悪についても説明している可能性があります。

プロトタイプがまだ必要だと思う場合は、代わりに配列でインデックスベースのループを使用してみてください

for(var i=0;i<arguments[0].length;i++){
    elmnt.innerHTML += args[a] + "<br/>";
}
于 2012-12-17T15:15:20.887 に答える