는 나는이 코드 리뷰에 설명 된대로 내가 전역 네임 스페이스뿐만 아니라 실제로 더 나은 캡슐화와 상속을 오염 아니에요 있도록 더 나은 내 자바 스크립트를 구조화 시작하려면 : https://codereview.stackexchange.com/q/64556/42628JavaScript, 싱글 톤을 사용하는 동안 적절한 캡슐화를 유지하는 방법은 무엇입니까?
그래서,이 예 (here is a fiddle of it) 걸릴. ..
window.myPage = {
init:function(){
//local "Private" declarations
var gridHandle1 = new myPage.MyGrid();
gridHandle1.loadGridData();
},
MyGrid: function(){
/* local "Private" declarations */
var dataLoadTimes = 0;
var gridDrawn = true;
$('#debug').append('grid is drawn<br>');
//This needs to be a public method because
//other functions need to reload the grid
//at various times. So I will use "this."
//instead of "var". "var" would make it a
//private method.
this.loadGridData = function() {
dataLoadTimes = dataLoadTimes+1;
$('#debug').append('grid data has been loaded '+dataLoadTimes+' times<br>');
};
this.loadGridData();
}
};
myPage.init();
// console.log(gridHandle1); // <--- fails, GOOD, it's not in the global namespace
// console.log(gridDrawn); // <--- fails, GOOD, it's not in the global namespace
나는 모든 것이 여기에 무슨 이해하고 "loadGridData는"전용 "에는 myGrid"에 해당하기 때문에 나는 그것을 좋아하지, 그것은 캡슐을 깰 것 "에는 myGrid"외부에서 자신의 기능되는 어떤 사업이 없습니다. 그러나이 방법을 수행하면이 라인 ...
멋진var gridHandle1 = new myPage.MyGrid();
, 그것은 나를이 같은 많은 그리드를 만들 수 있습니다 ...
var gridHandle1 = new myPage.MyGrid();
var gridHandle2 = new myPage.MyGrid();
var gridHandle3 = new myPage.MyGrid();
을 필요로하지만,이 시나리오에서 난 몰라 많은 그리드가 필요합니다. 나는 오직 하나만 필요로한다. 그래서 내 질문은 어떻게 모든 코드가 동일하게 작동하지만 "클래스"방식을 사용하지 않고 생성자 함수를 사용하여 객체를 인스턴스화하는 싱글 톤으로 수행 할 수 있도록이 코드를 조정할 것인가입니다.
감사합니다. 내 질문에 완전히 새 단장 했으니 잘 지켜봐야한다. 나는 그것이 캡슐화를 깨기 때문에 당신이 제안하는 것처럼 그것을하고 싶지 않다. Search()는 그리드 객체의 멤버 함수 여야하며 자체 함수는 아닙니다. 그리드는 var 범위가 아니므로 검색 결과()에 액세스 할 수 있도록 블리드 아웃됩니다. 바라건대 업데이트 된 질문을 통해 내가 무엇을 찾고 있는지 명확하게 알 수 있습니다. – gfrobenius
당신은 객체를 만들지 않고 변수와 함수를 캡슐화하는 것이 문제가되지 않는다는 것을 알게 될 것입니다 (javascirpt에서). 이것에 관해 많이 쓰여졌습니다. 사용자가 변수를 만들 수 있다면, 함수를 거의 호출하고, 객체를 다시 정의하고, 변수를 설정할 수 있습니다. 여러분은 프로토 타입을 가진 객체를 빌드하는 것보다 더 많은 메모리를 소비하는 클로저를 정의하는 경로를 밟을 것입니다 (위에서 작성한 작업을 수행하는 올바른 방법). 객체를 사용하고 싶지 않다는 결론이므로, 그것은 가치있는 것이 아니라 고통입니다. –
당신이 말한 것을 생각해보십시오 : "구성원이 개체를 가질 수있는 유일한 방법은 검색()이 멤버 함수 여야합니다"입니다. –