2013-05-09 5 views
1

자, 2 주 전, 저는 자바 스크립트에서 "모듈 패턴"에 대해 배웠습니다. "나는 소위 것을 기대하지 않았다, 그러나모듈 패턴 및 "전용 속성"

var myModule = myModule || {}; 

myModule.User = (function(){ 
    "use strict"; 

    // "private" attribut 
    var id 

    //constructor 
    var User = function(l_id){ 
     id = l_id; 
    }; 

    //"public" method 
    User.prototype.getId = function(){ return id }; 


    return User; 
})(); 

var u2 = new myModule.User(2); 
var u1 = new myModule.User(1); 
console.log(u2.getId()); // print 2 
console.log(u1.getId()); //print 2 oO 

:

var module = (function() { 
    // private variables and functions 
    var foo = 'bar'; 

    // constructor 
     var module = function() { 
    }; 

    // public methods 
    module.prototype = { 
     something: function() { 
     } 
    }; 

    // return module 
    return module; 
})(); 

var my_module = new module(); 

나는 매우 흥분했다, 그래서 나는 바로 내 자신의 테스트를 시작 : 내가 찾은 모든 예제처럼 기본적으로 갔다 개인 "attribut"id "는 인스턴스 변수가 아니 었습니다. 그리고 내가주의를 기울 였다면, 나는 그러한 변수의 범위를 알아 차렸을 것이다 ... 나는 "개인 변수와 함수"주석을 끔찍하게 잘못 이해했다 ...

그럼에도 불구하고, 나는 개인 모듈 내의 인스턴스 변수.

당신이 "모듈을 mixe 수있는 더 좋은 방법이 있나요 ...

myModule.User = (function(){ 
    "use strict"; 

    //constructor 
    var User = function(id){   
     this.getId = function(){ return id; }; 
    }; 

    return User; 
})(); 

그러나 더 이상 아무 프로토 타입 avantages 없다 : 순간 내가 찾은 유일한 해결책에 대한

이 예전의 좋은 방법입니다 패턴 "과 개인 인스턴스 변수의 사용?

답변

0

솔직히 말하면 나는 생성자와 모듈 패턴을 사용한 적이 없다. 그러나 당신이 찾고있는 것을 달성하기 위해 더 좋은 방법이 있다고 느낀다. :

var PrefixModule = (function() { 
    // this is going to be static ... also that's a real title ! 
    var staticTitle = "Intergalactic Federation King Almighty and Commander of the Universe"; 

    var PrefixModule = function() { 
     // this is an instance variable 
     this.secretPrefix = staticTitle + " ::"; 
    }; 

    // hidden from the world 
    var generateRandomNumber = function() { 
     return Math.floor(Math.random() * 100); 
    }; 

    PrefixModule.prototype.PrefixName = function (name) { 
     var randomNumber = generateRandomNumber(); 
     return this.secretPrefix + " " + name + " | " + randomNumber; 
    }; 

    return PrefixModule; 
})(); 

var m1 = new PrefixModule(); 
var m2 = new PrefixModule(); 
var m3 = new PrefixModule(); 

console.log(m1.PrefixName("Jon Skeet")); 
console.log(m2.PrefixName("Chuck Norris")); 
console.log(m3.PrefixName("vbarthel-fr")); 

여기는 fiddle입니다.

또한 귀하의 경우 id이 정적 변수로 설정되어 있으며 모듈간에 공유되어 있음을 분명히해야합니다. 도움이 되길 바랍니다.

+0

고마워요! 이것은 "모듈"을 더 잘 이해하는 데 도움이되었습니다. 모듈 스코프는 정적 공유 변수를위한 것입니다! –

+0

찾고있는 것이면 답을 받아 들일 수 있습니다. :) –