2017-10-11 6 views
1

Javascript의 Revealing Module Pattern을 실험 해본 결과, 한 모듈의 public 메소드를 다른 모듈로 public 메서드를 호출 할 수 있는지, 어떻게 이해할 수 있는지 이해할 수 없습니다. (코드를 단순화) 나는이 두 모듈이 있다고 가정 :Revealing Module Pattern을 사용하여 한 JS 모듈의 공용 메서드를 다른 모듈로 공용 메서드를 호출하는 방법은 무엇입니까?

1) 나는에 모듈 A에서 loadDefault() 메소드를 호출 할 어떻게

var lazyload = (function() { 

    function loadDefault() { 
     $('.lazy').load(); 
    } 

    return { 
     loadDefault: loadDefault 
    } 

})(); 

2) 모듈 B

var newposts = (function() { 

    function addNewPosts() { 
     $('.posts').append(); 
    } 

}); 

은 모듈 모듈 B의 addNewPosts() 방법?

import './ModuleA'; 
import './ModuleB'; 
+0

'import' 구문을 사용하여 호출하려는 함수를 가져 오려면 모듈에서 해당 함수를'내보내기 '해야합니다. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export – worc

답변

1

어떻게이 그것으로 아무 상관이 있지만 내 주요의 .js 내가 같은 두 모듈을 수입하고있어 파일에서, 그래서 어쩌면, 나는 웹팩을 사용하고 있음을 언급 할 가치가 있는지 확실하지 모듈 A의 loadDefault() 메소드를 모듈 B의 addNewPosts() 메소드라고 부릅니다.

당신은 이전 스타일의 계시 모듈 패턴을 사용하고 경우 lazyload.loadDefault()을 할 것입니다. 그러나 이것은 그것과 아무 상관이있는 경우

확실하지 ... 계속 읽어,하지만 내 주요의 .js과 같은 두 모듈을 수입하고있어 I 파일에서, 그래서 어쩌면, 내가 웹팩을 사용하고 있음을 언급 할 가치가 :

import './ModuleA'; 
import './ModuleB'; 

그런 다음 당신은 RMP를 사용하지 않습니다.

import {loadDefault} from './ModuleA'; 

export function addNewPosts() { 
    loadDefault(); 
    $('.posts').append(); 
} 

를하거나 하나 개의 기능을 원하는 경우 기본값으로 내보낼 :

export function loadDefault() { 
    $('.lazy').load(); 
} 

newposts.js을 :

lazyload.js을 대신, export를 사용

lazyload.js :

... 그리고는 가져 오기는 RMP는 자바 스크립트 모듈이 없기 때문에 문제를 해결하는 방법은

import loadDefault from './ModuleA'; 

했다입니다. 실제 모듈 (ES2015에서 소개 됨)을 사용하면 더 이상 RMP (모듈)가 필요하지 않습니다.

+0

잘 작동하고 좋아 보이면 더 자세히 조사 할 것입니다. 감사! – grazianodev