2016-07-11 7 views
0

申し訳ありませんがタイトルが多少曖昧な場合、私はこの概念をどのように呼び出すべきか本当に分かりません。Node.jsモジュール - 必要なオブジェクトメソッドをメインのAppオブジェクトに添付する

基本的に私は次のコードが含まれていmain.jsファイルがあります:私はまた、これらのメソッド(player.getPlayerByName)が含まれplayer.jsファイルを持っている

var util = require('./folder/util'); 
var summoner = require('./folder/player'); 

var App = { 
    timeout: 500, 
    apiKey: 'asdnanfasofafasqrqrsa', 
    region: 'can' 
} 

App.init = function(apiKey, region) { 
    this.apiKey = apiKey; 
    this.region = region; 
} 

App.getPlayerByName = player.getPlayerByName; 

module.exports = App; 

を。私の目標は、そのmain.jsエントリファイルとNPMモジュールを作成し、そのようにアクセスすることです:今

var main = require('main.js'); 

main.getPlayerByName('Jake'); 

私は「添付」に見つけた唯一の方法というメインAppオブジェクトにこれらのメソッド私ができるので、アクセスは、上記のように、main.jsに次のコード行を追加することです:

App.getPlayerByName = player.getPlayerByName; 

あるとしてそれは素晴らしい作品が、私はplayer.jsに多くのメソッドを追加した後、ファイルを私はたくさんありますmain.jsファイルに余分な膨らみがありますが、私は避けていません。これについてもっと良い方法がありますか?

ありがとうございます!

答えて

0

あなたは、プレイヤオブジェクトを反復処理し、あなたのAppオブジェクトにすべてのメソッドをコピーできます。

var App = { 
    timeout: 500, 
    apiKey: 'asdnanfasofafasqrqrsa', 
    region: 'can' 
} 

App.init = function(apiKey, region) { 
    this.apiKey = apiKey; 
    this.region = region; 
} 

// copy all methods from player to App 
for (var method in player) { 
    if (player.hasOwnProperty(method) && typeof player[method] === "function") { 
     App[method] = player[method]; 
    } 
} 

これは限りplayerはメソッドが実際のオブジェクトを使用していないだけで、名前空間オブジェクト、あるとして動作しますインスタンス。


それとも、あなただけの既存のplayerオブジェクトを使用している既存のオブジェクトに独自のプロパティを割り当てることができます。これらの両方のケースで

Object.assign(player, { 
    timeout: 500, 
    apiKey: 'asdnanfasofafasqrqrsa', 
    region: 'can', 
    init: function(apiKey, region) { 
     this.apiKey = apiKey; 
     this.region = region; 
    } 
}); 

module.exports = player; 

、あなたは何の方法がないことを確認する必要があります/プロパティ名はオブジェクトの2つの使用の間で競合します。

+0

最初の解決策は私が探していたものでした。ありがとう – Munsterberg

関連する問題