5

のプロトタイプをArrayのインスタンスとして設定しました。が表示されるmyと思いますが、 が表示されます。なぜですか? ありがとう!book.aa"aa""undefined"

   <html>
    <head>
        <title>Array Properties</title>
        <h2>Array Properties</h2>
        <script type="text/javascript">
            function my() {
                this.aa = 'aa';
            }
            Array.prototype = new my();
            Array.prototype.bb = "bb";
            var book = new Array();  
            book[0] = "War and Peace";  

        </script>
    </head>
    <body bgcolor="lightblue">
        <script type="text/javascript">
            document.write(book.aa+book.bb);
        </script>
    </body>

    </html>
4

2 に答える 2

7

は の読み取り専用プロパティであるArray.prototypeため、 に代入できません。prototypeArray

だからあなたが書くとき

Array.prototype = new my();

何も起こりません。理由を確認するには、試してください

JSON.stringify(Object.getOwnPropertyDescriptor(Array, "prototype"))

結果は

"{"value":[],"writable":false,"enumerable":false,"configurable":false}"

厳密モードでない限り、割り当ては暗黙のうちに失敗します。

そのため、http://jsfiddle.net/5Ysub/を参照してください。

function my() {
    this.aa = 'aa';
}
Array.prototype = new my();
Array.prototype.bb = "bb";
var book = new Array();
book[0] = "War and Peace";
document.write(book.aa+book.bb);

あなたが得る

undefinedbb

プロパティを作成して設定したときに実数bbに割り当てたため、機能します。 Array.prototypebb

ぶつけられないのは良いことですArray.prototype、IMHO。:)

于 2012-10-10T02:56:17.603 に答える