javascript] OOP정리. prototype
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// todo : 프로토 타입 var Dog = function() { } Dog.prototype = { name: "도그", getAlias: function () { return "꽃개";} }; var dog = new Dog(); alert(dog.name); alert(dog.getAlias()); function Pet( name ) { this._getName = function () { return name; } } Pet.prototype.getName = function () { return this._getName(); } var pet = new Pet("애완"); alert( pet.getName() ); |
prototype 은 object 확장 으로 생각하면 된다.
Dog 에 public으로 name과 getAlias() 멤버를 덧붙여주었다.
Pet의 this._getName은 protected member로써 외부에서 접근이 불가능하다.
이는 타언어처럼 객체 내부 또는 상속받은 객체에서 접근이 가능하다.
생성된 pet._getName은 직접 호출이 불가능하다.
그래서 Pet.prototype.getName 의 public member에서 호출하고 있다.
'# 6) JavaScript' 카테고리의 다른 글
javascript] OOP정리. 상속 (0) | 2014.05.23 |
---|---|
javascript] OOP정리. static 멤버 (0) | 2014.05.23 |
javascript] OOP정리. class처럼 만들기. (0) | 2014.05.23 |
javascript] OOP정리. function 이용법 (0) | 2014.05.23 |
javascript] OOP정리. class 처럼 생성해보기. (0) | 2014.05.23 |
javascript] OOP정리. class처럼 만들기.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// todo : 생성자 함수는 있지만 클래스는 없습니다. function Pet() { } var pet = new Pet(); // todo : 생성자.. function Pet1(name, alias) { var Name = name; // 이렇게하면 private , 이런 경우 이 멤버가 포함되어 정의된 함수를 이용하여야 값을 얻어갈수 있음. // 이를 자바스크립트에서는 권한있는 함수라고 부른다. // 프로토타입을 사용할 때도 역시 권한 있는 함수를 통해서만 접근이 가능하다. this.Alias = alias; // 이렇게 this로 멤버를 만들면 public! this.toString = function () // new ! { return Name; } } var pet1 = new Pet1("강아지", "개"); alert(pet1.Alias); alert(pet1.toString()); |
Pet이란 클래스 선언!
# function을 이용해서 만들수 있다.
Pet1 을 보면
파라미터 name, alias는 private member처럼 씌여진다.
var Name 역시 private member 이다.
this.Alias 와 this.toString은 public member다.
protected member는 this._{멤버명} 으로 정의된다.
'# 6) JavaScript' 카테고리의 다른 글
javascript] OOP정리. static 멤버 (0) | 2014.05.23 |
---|---|
javascript] OOP정리. prototype (0) | 2014.05.23 |
javascript] OOP정리. function 이용법 (0) | 2014.05.23 |
javascript] OOP정리. class 처럼 생성해보기. (0) | 2014.05.23 |
자바 스크립트] XOR 암호화. (0) | 2010.12.31 |
javascript] OOP정리. function 이용법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// todo : 방법1) Function 사용.. function func( arg1 ) { alert(arg1); } // todo : 방법2) functon 사용 var fn = function (arg1) { alert(arg1); } // todo : 방법3) function 사용 var cFn = new Function("arg1", "alert(arg1);"); func("방법1"); fn("방법2"); cFn("방법3"); // descript : 위 세가지 역시 동일하다. //todo : 익명함수 사용 function each( arr, eachFn) { console.log("eachFn typeof = " + typeof eachFn); console.log("eachFn typeof is " +( typeof eachFn === 'function')); if( arr ) for (var loop = 0; loop < arr.length; loop++) { if (eachFn && (typeof eachFn === 'function')) { eachFn(arr[loop]); } } } each([1, 2, 3], fn); |
익명함수는 매번 썼지만 ( typeof eachFn === 'function' ) 이렇게 해주는게 좋을것 같아서 해봤음.
'# 6) JavaScript' 카테고리의 다른 글
javascript] OOP정리. prototype (0) | 2014.05.23 |
---|---|
javascript] OOP정리. class처럼 만들기. (0) | 2014.05.23 |
javascript] OOP정리. class 처럼 생성해보기. (0) | 2014.05.23 |
자바 스크립트] XOR 암호화. (0) | 2010.12.31 |
[javascript] 정규식 관련.. (0) | 2010.11.18 |
javascript] OOP정리. class 처럼 생성해보기.
기존에 자바스크립트 관련 공부했을때 알았던 내용들이지만...
이번 프로젝트에서 ExtJs를 이용하게 되어 교육을 받던 중 다시 정리를 해봄.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// todo : 방법1) 자바스크립트 오브젝트 생성 var obj1 = new Object(); obj1.TestProperty = "방법1) 테스트 프로퍼티"; alert(obj1.TestProperty); // todo : 방법2) var obj2 = {}; obj2["TestProperty"] = "방법2) 테스트 프로퍼티"; alert(obj2.TestProperty); // todo : 방법3) var obj3 = { TestProperty: "방법3) 테스트 프로퍼티" }; alert(obj3.TestProperty); // descript : 위 세가지 방법은 object 생성이 동일함. |
'# 6) JavaScript' 카테고리의 다른 글
javascript] OOP정리. class처럼 만들기. (0) | 2014.05.23 |
---|---|
javascript] OOP정리. function 이용법 (0) | 2014.05.23 |
자바 스크립트] XOR 암호화. (0) | 2010.12.31 |
[javascript] 정규식 관련.. (0) | 2010.11.18 |
메뉴] 자바스크립트로 만든 메뉴 객체 (0) | 2009.05.09 |
그리드 폼 만들기 (2)
그리드폼 수정하느라 하루가 가버렸넹...
이번에 새로 만든 특이한넘! 을 이어서 추가해본다.
1. 그리드 폼을 선택하고 상세보기 클릭!
2. 디자인창이 뜨는데 닫으면 그리드폼.. 아무것도 없는게 뜬다.
여기에 디자인버튼을 누르면 ...
폼에 셋팅된 데이타 맞춤형 디자이너가 뜬다.
......
디자인 하면..
디자인을 저장하고... 닫으면.
디자인 된 폼으로 나타남.
추가 하면 추가 row가 계속 늘어나며 생기며 데이타를 관리 할 수 있음.
( 소스는 비공개.. )
끝!
'# 9) My Program(.NET) > JsFW40' 카테고리의 다른 글
LayerGrid] 다시 만듬. (0) | 2015.10.27 |
---|---|
금전관리 프로그램. (0) | 2015.09.26 |
그리드 폼 만들기 (1) (0) | 2014.03.15 |
PRJMNG] JS 디자이너~ (0) | 2012.12.27 |
jsfw ] New Version! (0) | 2012.05.13 |
그리드 폼 만들기 (1)
DB는 간단하게 Table 생성하고,
이번에 새로 만든 GridForm을 이용한 화면을 추가하면서 이글을 써본다.
정말 쓸게 없지만... 그만큼 간단하게 개발되는걸 남겨본다..
화면을 만들기 위해 사용자 정의 컨트롤을 추가하고 부모객체를 UserControl 에서 JSFW_Content 로 바꿔준다.
public partial class TestReportList : JSFW_Content
{
public TestReportList()
{
InitializeComponent();
}
}
요렇게 하면 상속된 화면으로 바뀐다.
여기에 Jsfw_Grid를 올려준후 그리드는 dock = fill로 꽉 채워준다. ( 화면에 변화가 안보일것임. )
그 다음 그리드에 뿌려질 데이타를 위해 정의된 테이블 객체를 생성한다. JSFW.ProjectHistory.DB._JSFW_DB_WorksDataSet.TestReportDataTable rpt = new DB._JSFW_DB_WorksDataSet.TestReportDataTable();
그리드 초기화 하는 구문과 ( Jsfw_Grid.init = delegate{}; )을 폼 데이타 초기화( Init() ) 구문을 작성한다.
public partial class TestReportList : JSFW_Content
{
JSFW.ProjectHistory.DB._JSFW_DB_WorksDataSet.TestReportDataTable rpt = new DB._JSFW_DB_WorksDataSet.TestReportDataTable();
public TestReportList()
{
InitializeComponent();
//그리드를 초기화 하는 구문
jsfW_GRID1.Init = delegate
{
jsfW_GRID1.Headers = new Headers()
{
{
new Header( rpt.IDColumn.ColumnName , "ID")
{ Width=50, Identity=true, DataType=typeof(int) }
},
{
new Header( rpt.RptTitleColumn.ColumnName , "테스트명")
{ Width=250, AllowEditing=true, DataType=typeof(string) }
}
};
jsfW_GRID1.Headers.PrimaryItems.Add(jsfW_GRID1.Headers[rpt.IDColumn.ColumnName]);
jsfW_GRID1.SelectionMode = SourceGrid.GridSelectionMode.Row;
};
}
public override void Init()
{
base.Init();
// 그리드에 데이타 바인딩.
jsfW_GRID1.DataSource = rpt.MDB_Load(DBENUM.WORKS.getConnectionStringInfo<AccessConnectionString>(), "");
}
}
JSFW_Window에 담아 띄워보면..
이렇게 그리드까지 만들어졌다.
기능 버튼( 추가, 삭제, 조회, 닫기, 보기 )을 추가해본다. 이때 ToolElmt 라는 프로퍼티에 버튼 리스트를 넣는다.
JSFW_ToolButtonElement 라는 버튼 객체인데. 이외에도 여러 타입이 있으나...
public partial class TestReportList : JSFW_Content
{
JSFW.ProjectHistory.DB._JSFW_DB_WorksDataSet.TestReportDataTable rpt = new DB._JSFW_DB_WorksDataSet.TestReportDataTable();
public TestReportList()
{
InitializeComponent();
ToolElmt = new JSFW_ToolElementList()
{
{ new JSFW_ToolButtonElement(){ Text="추가", Key="ADD", Flat= FlatStyle.Flat, BackColor=Color.FromArgb(0,174,255), ForeColor = Color.FromArgb(255,255,255)},
delegate{ }},
{ new JSFW_ToolButtonElement(){ Text="삭제", Key="DEL", Flat= FlatStyle.Flat, BackColor=Color.FromArgb(0,174,255), ForeColor = Color.FromArgb(255,255,255)},
delegate{ }},
{ new JSFW_ToolButtonElement(){ Text="저장", Key="SAVE", Flat= FlatStyle.Flat, BackColor=Color.FromArgb(0,174,255), ForeColor = Color.FromArgb(255,255,255)},
delegate{ }},
{ new JSFW_ToolButtonElement(){ Text="조회", Key="SELECT", Flat= FlatStyle.Flat, BackColor=Color.FromArgb(0,174,255), ForeColor = Color.FromArgb(255,255,255)},
delegate{ Init(); }},
{ new JSFW_ToolButtonElement(){ Text="닫기", Key="CLOSE", Flat= FlatStyle.Flat, BackColor=Color.FromArgb(0,174,255), ForeColor = Color.FromArgb(255,255,255)},
delegate{ Master.Close(); }},
{ new JSFW_ToolSplitElement() { Width = 20 } },
{ new JSFW_ToolButtonElement(){ Text="상세보기", Key="DETAIL", Flat= FlatStyle.Flat, BackColor=Color.FromArgb(0,174,255), ForeColor = Color.FromArgb(255,255,255)},
delegate{ }}
};
jsfW_GRID1.Init = delegate
{
jsfW_GRID1.Headers = new Headers()
{
{
new Header( rpt.IDColumn.ColumnName , "ID")
{ Width=50, Identity=true, DataType=typeof(int) }
},
{
new Header( rpt.RptTitleColumn.ColumnName , "테스트명")
{ Width=250, AllowEditing=true, DataType=typeof(string) }
}
};
jsfW_GRID1.Headers.PrimaryItems.Add(jsfW_GRID1.Headers[rpt.IDColumn.ColumnName]);
jsfW_GRID1.SelectionMode = SourceGrid.GridSelectionMode.Row;
};
}
public override void Init()
{
base.Init();
jsfW_GRID1.DataSource = rpt.MDB_Load(DBENUM.WORKS.getConnectionStringInfo<AccessConnectionString>(), "");
}
}
버튼들이 추가된 모습을 확인할수 있다.
각 추가기능을 넣으면..
추가
private void Insert()
{
jsfW_GRID1.NewRow();
}
삭제
private void Delete()
{
jsfW_GRID1.DeleteRow();
}
저장
private void Save()
{
IList<QueryParams> prms = jsfW_GRID1.GetQueryParams();
prms.MDB_Save(DataBaseConnectionInfoManager.Get<AccessConnectionString>(DBENUM.WORKS));
Init();
}
힛... 너무 짧은가?... 이게 다임...
GetQueryParams() 에서 자동으로 쿼리를 만들어서 내보내 줌!
보기는 다음 편에 이어서...
'# 9) My Program(.NET) > JsFW40' 카테고리의 다른 글
금전관리 프로그램. (0) | 2015.09.26 |
---|---|
그리드 폼 만들기 (2) (0) | 2014.03.18 |
PRJMNG] JS 디자이너~ (0) | 2012.12.27 |
jsfw ] New Version! (0) | 2012.05.13 |
[JsFW40] 코딩을 시작하다!! (0) | 2010.11.10 |
PRJMNG] 폼 양식 디자이너 ( 개발 실패! )
새로 만들고 있는 폼! 디자이너
엑셀 + 리포트 폼디자이너 + 일반 화면... 기능을 조금씩 짬뽕해서 섞어 보고 있다.
아이디어가 떠오른지 3일만에 여까지 왔네...
'# 9) My Program(.NET) > PRJMNG' 카테고리의 다른 글
Designer 리뉴얼... (0) | 2014.07.14 |
---|---|
Tree Grid] JSFW_GRID_TREE (0) | 2014.07.13 |
PRJMNG] 바로가기, 파일열기, 백업 (0) | 2014.02.04 |
PRJMNG] Project Manager Update (0) | 2014.01.26 |
JSFW] New 버젼! (0) | 2013.09.05 |
가장 가까운 점 구하기
이번 오브젝트 툴을 만들면서 오브젝트간에 관계 표시를 위해 라인을 그리던중...
기존에는 (오브젝트)중심점 --- (오브젝트)중심점으로 라인을 잡고 오브젝트면과의 교차점등을 구해서 라인을 그렸었는데...
생각해보니 내부에 다각형을 넣어두고 중심점이 아닌 다각형 꼭지점간에 라인을 그리면 좀더 많은 라인을 중첩되지 않게 구현이 될듯 하여 사각 박스 내부에 들어갈 다각형을 고민하였다. ppt에 원을 넣고 클릭하면 몇개의 점들이 보이는데 이걸 참고하기로 하였다.
우선 사각형을 만들었고, 내부에 원을 그려넣었는데 이 원의 꼭지점 갯수를 정했다 16개!
그리고 각 오브젝트간 관계에 대한 선을 그리기 전에 오브젝트간에 가장 가까운 점을 구하게 되었다.
알고리즘도 있는듯 한데 어차피 대상이 16개 - 16개 이므로 하나씩 루프를 돌며 찾는다.
완성된 모습... 오브젝트를 이리 저리 옮겨봐도 역시 잘 찾아서 따라온다.
Box = UserControl
내부 동그라미는 별도 관리 객체를 만들었고 Box내부에서 Paint로 그린다.
라인이 그려지기 전에 각 오브젝트간 관계에 따라 가까운 점을 찾아 그린다. ( 계산은 별도관리객체에서 한다. )
각 포인트마다 char 문자를 준 이유는 가장 가까운 점을 찾은 후 다음 관계라인을 그릴때는 다음 가까운 라인을 찾기 위해 쓰여진다.
'# 1) 프로그래밍' 카테고리의 다른 글
Directory.Create 관련... (0) | 2014.06.09 |
---|---|
C#] 프로세스의 파일경로 읽어오기. (0) | 2014.05.30 |
한글분해_결합, 오토마타... (0) | 2014.01.30 |
달력 컨트롤] 새로 만든 달력!!! (0) | 2014.01.26 |
알고리즘] 2 (0) | 2013.11.15 |
PRJMNG] 바로가기, 파일열기, 백업
# 파일열기 : 원래 있던 기능으로 원본 파일을 백업하고 파일을 연다.
# 바로가기 : 파일에 대한 접근을 할때 반드시 프로그램을 띄워야 했는데 이를 바로가기를 실행해줄 프로그램을 만들어서
백업로직을 넣어주었다.
해당파일을 선택하고 바로가기를 클릭 > 바탕화면에 Icon이 생성된다. 아래는 txt파일.
> 이후 해당 바로가기를 더블클릭하면 기존 파일열기처럼 파일 백업하고 열어준다.
# 백업 : 파일백업기준이 날짜에 1회 인데, 작업을 진행하다보면 백업이 필요할 때가 있다.
< 파일관리 >
< 바탕화면에 생긴 아이콘 >
< 프로세스 >
- 파일.lnk는 파일을 실행해주는 프로그램에 대한 바로가기파일임.
'# 9) My Program(.NET) > PRJMNG' 카테고리의 다른 글
Tree Grid] JSFW_GRID_TREE (0) | 2014.07.13 |
---|---|
PRJMNG] 폼 양식 디자이너 ( 개발 실패! ) (0) | 2014.03.09 |
PRJMNG] Project Manager Update (0) | 2014.01.26 |
JSFW] New 버젼! (0) | 2013.09.05 |
JSFW 디자이너] 데모 스샷! (0) | 2013.07.17 |
한글분해_결합, 오토마타...
전 부터 몇번 시도했었지만.. 어렵던 오토마타가 성공했다.
전엔 검색해도 글이 얼마 없더니 엄청 늘어나있네...
참고자료 : http://ydongyol.tistory.com/m/30 <-- 오토마타 설명인데 중간에 이해 안되는 것들이 많다.
http://i-coo.tistory.com/m/48 <-- 유니코드 분해, 결합
http://cook.byus.net/wp/?p=475 <-- 가상키보드 만들기 ( ie10에선 안돌더라 )
제일 위에 분해 결합. 뷃 이란 글자를 분해하고, 다시 재결합한 모양.
아래 IN, OUT은 Step+를 통해서 하나씩 입력하게 해서 한글이 만들어지는 과정을 확인했음.
char[] inputChars = new char[] { 'ㄹ', 'ㅣ', 'ㄴ', 'ㅜ', 'ㄱ', 'ㅅ', 'ㅡ', 'ㄹ', 'ㅣ', 'ㄴ', 'ㅜ', 'ㄱ', 'ㅅ', 'ㅡ' };
구현한 내용은 두가지를 짬뽕해서 만들었는데, 실제 오토마타라기 보다 한글 끼워맞추기?
각 한글 자음 모음이 들어와서 저장하는 것은 오토마타 로직을 이용했는데,
초성 중성 종성은 계산에 의한것이 아닌 초성, 중성, 종성자 모음에서 찾아오는 것으로 살짝 바꿨다.
그리고 최종 찾은 문자들로 오토마타의 End1, End2에서는 각 문자를 결합하였고...
키보드 키를 눌러 각 문자가 들어왔을때 결합시점을 언제해야되는지 몰라서 오토마타 로직을 다시 보고 다시보고..
하루를 꼬박 보고 비슷하게 구현이 되었다. 약간에 오류를 수정하고나니 이제 된다.
오토마타와 다른 부분은 스택을 안썼다. 소스가 부분 부분 나온데다가 몇개의 소스를 내려받아서 봤는데
각기 다른 방식으로 구현이 되어있어서 분석이 어렵더라..
한글이 각각 들어오는 부분과 오토마타 처리 로직과 비교해보면서 엑셀에 정리해서 코딩을 수정하면서
꼬박 하루 걸렸다.
'# 1) 프로그래밍' 카테고리의 다른 글
C#] 프로세스의 파일경로 읽어오기. (0) | 2014.05.30 |
---|---|
가장 가까운 점 구하기 (0) | 2014.02.08 |
달력 컨트롤] 새로 만든 달력!!! (0) | 2014.01.26 |
알고리즘] 2 (0) | 2013.11.15 |
알고리즘] 1 (0) | 2013.11.14 |