0

비공개/공개 메서드로 클래스를 구현하고 사용하는 방법을 이해하고 일부 읽은 후에도이를 사용하는 데 몇 가지 문제가 있습니다.JavaScript의 비공개 공개 메서드 및 변수

나는이 다음 코드 : 나는 "프로세스"와 "InitVariables"공공 방법이 될 것입니다 개인 방법과 "getFloors"것을 원하는

var _Exits = 0; 
var _Shuttles = 0; 

function Parking(_str) 
{ 
var Floors = 0; 
var str = _str; 
var Components = null; 

function process() 
{ 
    var Exit = new Array(); 
    Exit.push("exit1" + str); 
    Exit.push("exit2"); 
    var Shuttle = new Array(); 
    Shuttle.push("shuttle1"); 
    Shuttle.push("shuttle2"); 
    Components = new Array(); 
    Components.push(Exit, Shuttle); 
} 

function InitVariables() 
{ 
    var maxFloors = 0; 

    _Exits = (Components[0]).length; 
    _Shuttles = (Components[1]).length; 

    /* 
    algorithm calculates maxFloors using Componenets 
    */ 

    Floors = maxFloors; 
} 

//method runs by "ctor" 
process(str); 
InitVariables(); 
alert(Floors); 
} 

Parking.prototype.getFloors = function() 
{ 
return Floors; 
} 

var parking = Parking(fileString); 
alert("out of Parking: " + parking.getFloors()); 

동안 "마루", "STR"과 "구성 요소 "사적인 vars 것입니다. 변수를 private로 만들고 "프로세스"와 "InitVariables"를 private으로 설정했지만 "getFloor"메서드로 성공하지 못했을 것으로 생각합니다.

"alert (Floors);" 나에게 옳은 대답을 보여준다. "경고 (Floors);" 아무 것도 보여주지 않습니다. 내 질문 : 1. "getFloors"를 어떻게 보완 할 수 있습니까? 2. 코드를 잘 작성했거나 변경해야합니까?

+0

가능한 중복 [어떻게 생성자에서 자바 스크립트 전용 변수를 설정 하시겠습니까?] (http://stackoverflow.com/questions/6799103/how-to-set-javascript-private-variables-in-constructor) –

답변

1

이 코드를 테스트하지 않은하지만 당신은 민간 및 공공 회원들과 자바 스크립트 클래스를 구현하는 방법을 이해하는 데 도움이 될 것입니다

var Parking = (function(){ 
    "use strict"; //ECMAScript 5 Strict Mode visit http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ to find out more 

    //private members (inside the function but not as part of the return) 
    var _Exits = 0, 
    _Shuttles = 0, 
    // I moved this var to be internal for the entire class and not just for Parking(_str) 
    _Floors = 0; 

    function process() 
    { 
     var Exit = new Array(); 
     Exit.push("exit1" + str); 
     Exit.push("exit2"); 
     var Shuttle = new Array(); 
     Shuttle.push("shuttle1"); 
     Shuttle.push("shuttle2"); 
     Components = new Array(); 
     Components.push(Exit, Shuttle); 
    }; 

    function InitVariables() 
    { 
     var maxFloors = 0; 
     _Exits = (Components[0]).length; 
     _Shuttles = (Components[1]).length; 

     /* 
     algorithm calculates maxFloors using Componenets 
     */ 
     _Floors = maxFloors; 
    } 

    function Parking(_str) 
    { 
     // Floors was internal to Parking() needs to be internal for the class 
     //var Floors = 0; 
     var str = _str; 
     var Components = null; 
     //method runs by "ctor" 
     process(str); 
     InitVariables(); 
     alert(_Floors); 
    } 

    //public members (we return only what we want to be public) 
    return { 
     getFloors: function() { 
      return _Floors; 
     } 
    } 
}).call(this) 

console.log(Parking.getFloors()) 

이 도움이 :) 희망을