1

配列を渡すために使用している複数の配列を受け入れることができる API を使用apply()していますが、配列には、個々の配列から削除できないように見えるプロトタイプ関数が含まれています。最終的に何が起こるかというと、そのプロトタイプ関数が実行されるということです。

これはプロトタイプ関数です: if ( !Array.prototype.last ) { Array.prototype.last = function(){ return this[this.length - 1]; }}

たとえば、各配列をログに記録すると、eventList 配列に次のように表示されます。

["name1", "index1", "value1", last: function]
["name2", "index2", "value2", last: function]
["name3", "index3", "value3", last: function]

次に、配列をプッシュします。

apiName.push.apply( apiName, eventList );

array.pop()各配列の「最後の」関数を削除しようとしましたが、役に立ちませんでした。

そもそもプロトタイプ関数はどのようにして配列に入れられ、apply() で呼び出されないようにするにはどうすればよいでしょうか?

洞察をありがとう!

4

1 に答える 1

1

配列は JavaScript のオブジェクトです。オブジェクトと同様に、プロパティとプロトタイプを持つことができます。

元:

var a = [];
a.foo = "bar";

これは完全に有効です。しかし"bar" 、配列にありますか?

聞いてみよう:

console.log(a.length); // 0
console.log(a.foo); // "bar"

つまり、いいえ配列にはありませんが、オブジェクトのプロパティとして存在します。

プロパティと同様に、プロトタイプに何かを追加しても の値には影響しません.length

ログ記録時にカスタム プロトタイプが表示されるのは少し残念 (混乱) ですが、これはデバッガーのカスタマイズによるものだと思います。

于 2013-05-07T16:22:58.657 に答える