1

私が調べていたPhoneGap/cordovaファイルから、以前にこれに出くわしました。

  var app = {
    initialize: function() {
        this.bind();
    },
    bind: function() {
        document.addEventListener('deviceready', this.deviceready, false);
    },
    deviceready: function() {
        // This is an event handler function, which means the scope is the event.
        // So, we must explicitly called `app.report()` instead of `this.report()`.
        app.report('deviceready');
        app.handleLogin();
    },
  }

ボディロードで実行されるスタンドアロン関数とは対照的に、これを行う利点は何だろうと思っていましたか? また、jquery モバイルの「pagebeforeload」で関数を実行する場合、これを上記のパターンにどのように統合しますか? そのような:

    $( '#mainMenu' ).live( 'pagebeforeshow', function(event){
    alert('pagebeforeshow');
});
4

2 に答える 2

4

要するに名前空間。

JavaScript では、明示的に非グローバルにしない限り、すべてがグローバルです。これは、物事の名前が衝突したり、意図していないものを上書きしたりする可能性があることを意味します. 大規模なプログラムでは大きな問題です。

表示するパターンは、アプリのすべての機能の名前空間を単一のapp「オブジェクト」にします。そのため、グローバル スコープで上書きbindされたものは、 の値には影響しませんapp.bind。名前空間がそれを保護します。

経験則としては、グローバル名前空間をできるだけ汚染しないようにすることです。この場合、appグローバルにします。それだけです。すべてのコードは、その 1 つのグローバル値にぶら下がっています。身なりがきちんとして。


あなたの例を統合する方法について。私はこのようなことをするかもしれません:

  var app = {
    initialize: function() {
        app.bindEventHandlers();
        // other setup code called here...
    },
    bindEventHandlers: function() {
        $( '#mainMenu' ).live( 'pagebeforeshow', app.pageBeforeShow );
        // other event handlers bound here...
    },
    pageBeforeShow: function() {
        alert('pagebeforeshow');
    },

    // other event handler functions declared here...
    // or whatever other functions or data your app needs here...
  }

  // start your app when the document is ready
  $(document).ready(function() {
    app.initialize();
  });
于 2013-02-05T19:13:41.210 に答える
1

OOP 言語を使用したことがある場合は、クラスの定義を知っています。JS は class-keyword をサポートしていないため、メソッドを使用してオブジェクトを作成するには、次のコードを使用する必要があります。次に、 app.initialize() を呼び出すだけです。また、アプリケーションのアーキテクチャに高度な機能を提供することもできます。

コードを既存の機能に統合するには、プロトタイプを作成する必要があります。

app.prototype = { nameOfFunctionHere: function() { alert('pagebeforeshow'); } }

あとは電話するだけ

app.nameOfFunctionHere();

あなたの機能を実行する

于 2013-02-05T19:16:56.560 に答える