2016-11-22 1 views
0

자바 스크립트를 심각하게 시작합니다. 아래 코드에 어떤 문제가 있습니까?모듈 패턴이 정의되지 않았습니다. 변수

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}입니다. 이것은 저에게 너무 추합니다. 당신이 당신의 방법에 인수를 전달하려면 그냥

return{ 
    methodA: function(){ 

    } 
}; 
+1

문제가 아니라 변수

를 공유 만들지 만,주의가 그 라인'VAR 이름 = 이름, 나이 = 나이;'는 행동에 변화없이 제거 될 수 있습니다 - 함수 인자는 이미 클로즈의 일부입니다 따라서 로컬 변수에 복사 할 필요가 없으며 함수 인수와 같은 이름의 로컬 변수를 만들려고해도 아무 것도하지 않습니다. – nnnnnn

답변

1

처럼 반환 내에서 내 방법을 포장해야, 당신과 같이 당신의 print 기능에 넣어해야합니다.

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);

개인적으로, 나는 웹팩 또는 Browserify 같은 빌더, ES6 모듈 또는 CommonJS 모듈을 권 해드립니다.

+0

아아, 함수 print가 Person obj 대신 param을 받도록합시다. 알 겠어! 하지만이 모듈 패턴이 드러나고 있습니까? 캡슐화를 위해 Person 객체 내에 private 변수가 있음을 기억합니다. –

+0

@JessJordan 예, 당신은 개인 변수와 함수를 그 클로저 안에 넣을 수 있습니다. 그냥 돌려 보내지 마. –

+0

ES6 모듈은 webpack과 관련이 있습니까? –

1

Immediately invoked function expression입니다.

여기 고정 스 니펫으로 이동합니다.

+1

이것은 전혀 융통성이 없습니다. 그럼 내 사람은 어떻게 역동적 일 수 있습니까? –

0

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();
이 당신이 원하는, 이름, 나이
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);

관련 문제