2016-11-22 25 views
0

JavaScriptを真剣に受け入れ始めました。下のコードで何が間違っていますか?モジュールのパターンが定義されていません変数

var Person = (function(name,age){ 
    var name = name, age = age; 
    var print = function(){ 
     console.log('I"m '+name+', and I"m '+age+' year old'); 
    } 

    return {print:print} 
})(); 

Person.print("James",19); 

私は名前と年齢が定義されていません。私はこのパターンでも問題が見つかりました。最後に多くの方法があれば、あなたの帰りは

return {methodA:methodA, methodB:methodB, methodC:methodC}これは私にとってはとても醜いです。私はちょうどあなたがあなたのメソッドに引数を渡したい場合は、あなたがそうのように、あなたのprint機能でそれらを置くべき

return{ 
    methodA: function(){ 

    } 
}; 
+1

、あなたは何をしたいの問題これではありませんが、ラインがVAR名を 'ことに注意してください名前、年齢=年齢; 'は挙動の変更なしで削除することができます - 関数の引数は既にクロールの一部ですそれでローカル変数にコピーする必要はなく、関数の引数と同じ名前のローカル変数を作成しようとしても何もしません。 – nnnnnn

答えて

1

のようなリターン以内に私のメソッドをラップする必要があります。

var Person = (function(){ 
 
    var print = function(name,age){ 
 
     console.log('I"m '+name+', and I"m '+age+' year old'); 
 
    } 
 

 
    return {print:print} 
 
})(); 
 

 
Person.print("James",19);


代わりに、あなたが直接あなたの生命維持に引数を渡すしようとしているかもしれないが、私はそれがある場合、私はそれを行うにはポイントを参照してくださいわからないんだけど場合。

var Person = (function(name,age){ 
 
    var print = function(){ 
 
     console.log('I"m '+name+', and I"m '+age+' year old'); 
 
    } 
 

 
    return {print:print} 
 
})("James",19); 
 

 
Person.print();


はい、あなただけのオブジェクトの上にあなたの方法を返すことができますが、それは技術的には、モジュールのパターンを明らかにすることはないだろう。個人的に

var Person = (function(){ 
 
    return { 
 
     print: function(name,age){ 
 
      console.log('I"m '+name+', and I"m '+age+' year old'); 
 
     } 
 
    } 
 
})(); 
 

 
Person.print("James",19);

あなたが本当に現代のJavaScriptに取得したい場合、私はWebPACKのかBrowserifyなどのビルダーで、ES6モジュールまたはCommonJSモジュールをお勧めします。

+0

ああ、私はそれを持って、関数のprintはPerson objの代わりにparamを受けさせます。わかった!しかし、この明らかなモジュールパターンはありますか?カプセル化のためにPersonオブジェクト内にprivate変数があることを覚えています。 –

+0

@ JessJordanはい、あなたはそのクロージャの内部にプライベート変数と関数を持つことができます。ただそれらを返さないでください。 –

+0

ES6モジュールはwebpackと関係がありますか? –

1

Immediately invoked function expressionのためです。

ここでは固定スニペットを使用します。

var Person = (function(name,age){ 
 
    var name = name, age = age; 
 
    var print = function(){ 
 
     console.log('I"m '+name+', and I"m '+age+' year old'); 
 
    } 
 

 
    return {print:print} 
 
})("James",19); 
 

 
Person.print();

+1

これはまったく柔軟ではありませんが、私のPersonはどのようにして動的になりますか? –

0

=作る名前と年齢が変数共有

var Person = (function(name,age){ 
 
    var name = name, age = age; 
 
    
 
    var print = function(name,age){ 
 
     this.name = name; 
 
     this.age = age; 
 
     console.log('I"m '+this.name+', and I"m '+this.age+' year old'); 
 
     } 
 
    return {print:print} 
 
})(); 
 

 
Person.print("James",19);

関連する問題