0

NewsCalendar という準名前空間/クラスを作成しました。私の意図は、グローバル名前空間の汚染を回避し、プライベートにする必要がある関数を非表示にすることです。しかし、パブリック メソッドであるべきものを呼び出そうとすると、「オブジェクトはこのプロパティまたはメソッドをサポートしていません」というメッセージが表示されます。

function NewsCalendar()
{
    var privatevar; //private vars

    this.onLoad = function () //public method
    {
        //Do Stuff
    };

    function getWeekStart(date) //private function
    {
        //Do Stuff
    }
}

コメントは、各アイテムがどのように動作することを意図しているかを示すためにあります。

次のように onLoad 関数を呼び出してみました。

NewsCalendar.onLoad();

ただし、「オブジェクトはこのプロパティまたはメソッドをサポートしていません」というエラーが発生します。NewsCalendar を名前空間のように使用し、NewsCalendar.propertyname または NewsCalendar.methodname() を使用して、このオブジェクトに関連付けられた変数/メソッドを呼び出せるようにしたいと考えています。

4

2 に答える 2

1

次の設定を試してください。

var NewsCalendar = (function () {
    var privatevar;

    var onLoadHandler = function () {
        //Do Stuff
    };

    function getWeekStart(date) {
        //Do Stuff
    }

    return {
        onLoad: onLoadHandler
    };
})();

そして、次を使用します。

NewsCalendar.onLoad();

返されたもの{}はすべてパブリックです。周囲の関数の内部にあるものは、その内部にあるものからのみアクセスできます。

このセットアップを提案する理由は、複数のオブジェクトをインスタンス化するのではなく、プロパティ/メソッドのライブラリとして使用するように思われるためです。

于 2013-05-08T19:04:31.553 に答える