2017-04-19 11 views
0

誰でも次のコードでapp.receivedEvent('deviceready')が使用されていて、this.receivedEvent('deviceready')ではないことを教えていただけますか?phonegap index.jsファイルなぜapp.receivedEvent not this.receivedEvent

var app = { 
    // Application Constructor 
    initialize: function() { 
     this.bindEvents(); 
    }, 
    // Bind Event Listeners 
    // 
    // Bind any events that are required on startup. Common events are: 
    // 'load', 'deviceready', 'offline', and 'online'. 
    bindEvents: function() { 
     document.addEventListener('deviceready', this.onDeviceReady, false); 
    }, 
    // deviceready Event Handler 
    // 
    // The scope of 'this' is the event. In order to call the 'receivedEvent' 
    // function, we must explicitly call 'app.receivedEvent(...);' 
    onDeviceReady: function() { 
     app.receivedEvent('deviceready'); 
    }, 
    // Update DOM on a Received Event 
    receivedEvent: function(id) { 
     var parentElement = document.getElementById(id); 
     var listeningElement = parentElement.querySelector('.listening'); 
     var receivedElement = parentElement.querySelector('.received'); 

     listeningElement.setAttribute('style', 'display:none;'); 
     receivedElement.setAttribute('style', 'display:block;'); 

     console.log('Received Event: ' + id); 
    } 
}; 

答えて

1

のコメントは実際にthisappを使用する理由について説明します

// The scope of 'this' is the event. In order to call the 'receivedEvent' 
// function, we must explicitly call 'app.receivedEvent(...);' 

基本的には、イベントハンドラは、(どこthisがイベントオブジェクトになりますthisの独自のコンテキストでイベントコールバックを呼び出します)。

receivedEventのメソッドは、this(イベントコールバック関数内のイベントオブジェクトに設定されている)ではなく、appで定義されています。この場合、receivedEventilを呼び出すには、オブジェクトを含むメソッドとして呼び出すことになります。app

app.receivedEvent(...); 
関連する問題