2014-02-20 4 views
2

자바 스크립트에서 모듈 패턴을 사용하여 격리를 만들려고합니다.자바 스크립트 모듈 패턴 격리

내가이 코드를 실행할 때 :

New Document in 230! (index):29 
PAGE LOAD from 318: 230 (index):40 
New Document in 318! (index):44 
PAGE LOAD from 318: 318 

하지만 난 기다리고 있었다 : 나는 다음과 같은 결과를 얻을

var mymap = {}; 

mymap['230'] = (function() { 
    privatePageLoad = function(nid, page){ 
     console.log('PAGE LOAD from 230: '+nid); 
    } 

    function handleDocummentAdded() { 
     console.log("New Document in 230!"); 
     privatePageLoad(230, 0); 
    }; 

    return { 
     newDocument: handleDocummentAdded 
    } 
})(); 

mymap['318'] = (function() { 
    privatePageLoad = function(nid, page){ 
     console.log('PAGE LOAD from 318: '+nid); 
    } 

    function handleDocummentAdded() { 
     console.log("New Document in 318!"); 
     privatePageLoad(318, 0); 
    }; 

    return { 
     newDocument: handleDocummentAdded 
    } 
})(); 

mymap['230'].newDocument(); 
mymap['318'].newDocument(); 

New Document in 230! (index):29 
PAGE LOAD from 230: 230 (index):40 
New Document in 318! (index):44 
PAGE LOAD from 318: 318 

이라고 개인 방법은 항상지도에 마지막으로 추가 ... 내가 뭘 잘못 했니? 여기

당신은 var와 "privatePageLoad"를 선언하는 것을 잊었다 그것과 jsfiddle http://jsfiddle.net/jpedro/4xdTA/

답변

2

입니다. 따라서 전역 변수입니다.

또한 함수 선언 문을 사용할 수 있습니다

또한
mymap['230'] = (function() { 
    function privatePageLoad(nid, page){ 
     console.log('PAGE LOAD from 230: '+nid); 
    } 

    function handleDocummentAdded() { 
     console.log("New Document in 230!"); 
     privatePageLoad(230, 0); 
    }; 

    return { 
     newDocument: handleDocummentAdded 
    } 
})(); 

, 코드의 상단에

"use strict"; 

퍼팅의 습관을. 이 경우 오류가 발생했습니다.

4

privatePageLoad은 전혀 비공개가 아닙니다. 그렇지 않으면 privatePageLoad 글로벌 될 것 var 추가 (전역 객체의 즉 재산 (창, 모듈, 무엇이든))와 같은 뭔가

변경 코드를 :

var mymap = {}; 

mymap['230'] = (function() { 
    var privatePageLoad = function(nid, page){ 
     console.log('PAGE LOAD from 230: '+nid); 
    } 

    function handleDocummentAdded() { 
     console.log("New Document in 230!"); 
     privatePageLoad(230, 0); 
    }; 

    return { 
     newDocument: handleDocummentAdded 
    } 
})(); 

mymap['318'] = (function() { 
    var privatePageLoad = function(nid, page){ 
     console.log('PAGE LOAD from 318: '+nid); 
    } 

    function handleDocummentAdded() { 
     console.log("New Document in 318!"); 
     privatePageLoad(318, 0); 
    }; 

    return { 
     newDocument: handleDocummentAdded 
    } 
})(); 
관련 문제