2014-01-25 5 views
0

우리가 증강 모듈 패턴의 예를 아래에 JavaScript.Taking에서 세부 정보를 덮어 코드 위자바 스크립트 증강 모듈 패턴 var에 이름을 반복

<script> 

var Module = (function() { 

    // Module object 
    var module = {}, 
    privateVariable = "Hello World"; 

    function privateMethod() { 
    // ... 
    } 

    module.publicProperty = "Foobar"; 
    module.publicMethod = function() { 
    //console.log(privateVariable); 
    return privateVariable; 
    }; 
    return module; 

})(); 

//Defining same name MODULE var again 
var Module = (function (my) { 
     var newvar = 999; 
    my.anotherMethod = function() { 
     return newvar; 
    }; 

    return my; 
}(Module)); 



alert(Module.publicMethod()); 
//How this upper MODULE property is accessible ? Should be hide by 
//next same name MODULE var?** 
alert(Module.anotherMethod()); 

</script> 

가 완벽하게 정상적으로 실행 및 모듈에서 한 번 더 anotherMethod를 추가하지 않고 var에 이름을 다시 할 수 있지만, 어떻게 초기 모듈 속성에 접근하고 있는가. 동일한 이름 (MODULE)을 가진 var를 정의하는 것은 상위 모듈을 덮어 쓰지 (제거) 않는다.

+0

무엇이 당신의 질문입니까? – Mathletics

+0

(코드 편집) 다른 함수 객체로 MODULE을 재 할당하는 경우 이전 모듈을 덮어 쓰지 않고 기존 MODULE에 추가하는 방법이 일부 JavaScript 언어 기능입니까? – user3236118

답변

0

var을 동일한 이름 (MODULE)으로 정의하면 상위 모듈을 덮어 쓰지 (제거) 않습니다.

예. 그렇습니다.

전역 범위 (또는 함수 안에있는 경우 함수)는 var 문에 대해 검색됩니다. 두 개의 동일한 항목이 있으므로 두 번째 항목은 무시됩니다. MODULE이 전역 범위에 만들어집니다.

그런 다음 함수를 실행 한 다음 반환 값을 MODULE에 할당합니다.

다음 다른 함수를 실행하여 현재 값 MODULE을 인수로 전달한 다음 반환 값을 MODULE에 할당합니다.

var my = {}에서 생성 된 개체에 대한 참조는 두 번째 기능의 범위에 여전히 존재하지만 전역 범위의 유일한 참조는 덮어 씁니다.

+0

두 번째 함수 객체에 전체 MODULE (첫 번째 함수 객체)을 전달 했으므로 두 번째 함수 객체 (두 번째 MODULE)와 첫 번째 MODULE var에 복사 된 모든 속성이 이제는 – user3236118

+0

이 아니므로 말하십시오. 변수' my'','MODULE'과'MODULE'은 모두 객체에 대한 참조를 가지고 있습니다. 자바 스크립트 변수는 객체 자체를 포함하지 않으며 객체 자체에 대한 참조 만 포함합니다. – Quentin

+0

좋아,하지만 개체 참조를 변경하고 참조를 추가하는 것처럼 동작합니다. 이전 참조를 유지합니다. 이제 MODULE이 두 함수 (위와 아래)를 참조합니다. 방법? – user3236118