0

ここでは Array.prototype 自体が array([]) 参照なので、ネイティブ プロトタイプを置き換える必要がある場合は、代わりにリテラル オブジェクトを配置するにはどうすればよいでしょうか? リテラル配列を配置する必要がありますね。

Array.prototype=[]
4

2 に答える 2

2

に新しい配列を割り当てても意味がありませんArray.prototype。通常、これは読み取り専用のプロパティであり、割り当てはサイレントに失敗します。

> a = []
[]
> a === Array.prototype
false
> Array.prototype = a
[]
> a === Array.prototype
false

割り当てが成功したとしても、元のプロトタイプが配置された状態で置換配列が作成されている必要があります。したがって、元のプロトタイプは[[prototype]]新しいプロトタイプ オブジェクトの であり、すべてのネイティブ メソッドは、割り当て後に作成された配列のプロトタイプ チェーンで引き続き検出されます。

Array(例: ) のネイティブ インスタンス メソッドを置き換える (非表示にする) 場合はpush、新しいメソッドを適切なプロパティに割り当てるだけです。

Array.prototype.push = . . .;

また、ネイティブ メソッド ( など) を拡張する方法については、この回答pushを参照してください。(なんらかの方法でネイティブ メソッドを拡張している場合を除き、これが本当に悪いこと以外のユース ケースを想像することはできません。それでも...)

于 2013-04-28T19:12:37.893 に答える