0

DOM のロード後にグローバルにアクセスできるオブジェクトを作成したいと考えています。私のアプローチは、プロトタイプ dom:loaded イベントを使用し、オブジェクトをインスタンス化することです。

JavaScript コード:

document.observe("dom:loaded", function() {

    var globalPAO = new picArrayObject();
    alert(globalPAO.picArray[0]); // alerts [object HTMLDivElement]
});

var picArrayObject = function () {

    var myPic1 = document.getElementById('pic1');
    var myPic2 = document.getElementById('pic2');
    var myPic3 = document.getElementById('pic3');

    function construct() {
        this.picArray = [myPic1,myPic2,myPic3];
    }

return new construct();
}

myTrigger.onClick = function () {

    alert(globalPAO.picArray[0]); // alerts nothing
}

自分で試してみてください: http://jsfiddle.net/vEGXH/2

4

2 に答える 2

0

窓に入れてみませんか?

など、スクリプトのどこでもwindow.globalPAO = new picArrayObject();使用できますglobalPAO

于 2010-07-30T15:05:47.657 に答える
0

私が見ている3つのこと:

  1. ハンドラー内にクリック ハンドラーを割り当てる必要があります"dom:loaded"。そうしないと、ID を持つ要素がtriggerまだ存在しない可能性があります (実際、これは Safari のエラー コンソールに表示されるエラーです。

    TypeError: 式 'myTrigger' [null] の結果はオブジェクトではありません。

    )。

  2. 使い方return new construct()は複雑すぎるようです。

  3. var globalPAOローカル変数を作成します。省略varした場合は、グローバルなものを作成します。

改善例:

document.observe("dom:loaded", function() {

    globalPAO = new picArrayObject();
    alert(globalPAO.picArray[0]); // alerts [object HTMLDivElement]

    var myTrigger = document.getElementById('trigger');
    myTrigger.onclick = function () {
        alert(globalPAO.picArray[0]); // alerts object HTMLDivElement]
    }
});

var picArrayObject = function () {

    var myPic1 = document.getElementById('pic1');
    var myPic2 = document.getElementById('pic2');
    var myPic3 = document.getElementById('pic3');

    this.picArray = [myPic1,myPic2,myPic3];
}

自分で試してみてください: http://jsfiddle.net/vEGXH/4/

于 2010-07-28T02:05:28.973 に答える