0

ブラウザー (配列など) でのグローバルのオーバーライドに関するJohn Resigの記事を読んだところですが、ブラウザーでその例を試しても何も起こりませんでした。

ここにコード:

var sec = {};
function Array() { 
    alert(1); 
    sec = this; 
}; 

["zdxc", "sd", 1111, 11.1]ブラウザのコンソールで実行しても、何も起こりませんでした。アレイが宣言され、アラートは表示されません。

それは最新のブラウザーで修正されたバグですか、それとも一部のバージョンのブラウザーではまだ機能しますか?

4

1 に答える 1

2

new Array();これは、呼び出しが実際の代わりにカスタムオブジェクトを返すようにする配列コンストラクターをオーバーライドするためですArray

そう呼ぶ

var arr = ["zdxc", "sd", 1111, 11.1];

arrbeeing をネイティブにしますArray

通話中

var arr_override = new Array();

beingを前に宣言した型にすることで、-statement を実行しarr_overrideます。コンストラクターの種類をオーバーライドすると、識別子から -initialisation が「消去」され、コンストラクター関数に置き換えられます。実際のものではありません。ObjectalertArrayArray

この質問への回答によると、Array-Literal ( []) は、2008 年頃からすべての市長ブラウザーでこの動作の影響を受けていません。

編集:

少し試してみたところ、-表記の動作を変更することはできないようであり、[]ネイティブ オブジェクト (特にそのコンストラクター) を変更することもお勧めできません。

以下の例のように、プロトタイプを拡張し、既存のプロパティ/メソッドを変更することは可能ですか?

var arr = [];
arr.push('2323');
alert(arr);

Array.prototype.push = function() { alert('trololololo'); }
arr.push(123);

お役に立てれば。乾杯!

于 2013-02-11T09:02:13.693 に答える