블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday

달력

« » 2024.5
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

공지사항

최근에 올라온 글

자바스크립트에는 클래스가 없다. 함수를 이용하여, 클래스처럼 사용한다. 보통 아래의 class1,class2와 같이, 함수내부에서 this에 멤버변수를 할당하는 방식을 사용한다. 그러나, this는 함수가 아닌, Window객체이다. 함수내부의 멤버함수 내부에서 this는 호출한 부모 오브젝트이다. 물론, this에 동일한 이름의 멤버변수가 없는 경우, 문제가 되지 않는다.(잘 돌아간다.) 배열로 만들거나, 동일한 멤버변수(함수)가 존재할 경우, 문제가 된다.
(크롭브라우져에서는) 멤버변수를 만들때, class3()과 같이 사용하는것이 좋을듯 싶다. function class1() { this.a=1;//결론:전역변수(Window이다) 크롭브라우져에서 브레이크 걸어서 확인하면된다. } function class2() { this.a=2; } function class3()//이렇게 사용해라. { var o={}; o.a=3; return o; } function test_class_this1() { console.log("클래스를 만들기위해 함수내에서 this를 사용할 경우, 클래스함수 내에서 this는 무엇인가?"); var a=class1(),b=class2(),c=class3(); console.log("this.a=",this.a); console.log("c.a=",c.a);//c.a= 3 console.log("a.a=",a.a);//Uncaught TypeError: Cannot read property 'a' of undefined console.log("b.a=",b.a); } test_class_this1();



'자바스크립트' 카테고리의 다른 글

8비트, 16비트, 32비트 버퍼 메모리 액세스  (0) 2017.06.14
Sleep  (0) 2017.06.12
this  (0) 2017.06.08
자바스크립트-멤버함수내에서 this를 항상 사용해야하는가?(생략가능한가?)  (0) 2017.06.07
sprintf  (0) 2017.05.27
Posted by 안녕1999
, |
자바스크립트에서, this를 사용하여 클래스를 만들었다고 하는 글들이 있다.
물론,
- 배열을 사용하지 않고, 1개만 생성했을때,
- 다수의 클래스에서 동일한 이름의 멤버를 사용하지 않았을때
  (클래스마다 멤버 이름이 모두 다른경우)
인 경우에는 문제가 없다.
전역변수 this(window)에 멤버변수로 추가했으니...

this는 호출자를 나타낸다.
- f();  인경우, f()함수 내부에서 this는 window이다.
- a.f(); 인경우, f()함수 내부에서 this는 a이다.

C++같은 오브젝트 오리엔티드 언어에서는 this가 명확하다.
자바스크립트에서도 명확하다, 그러나 주의할 점이 있다.
멤버함수 내부에서도, "this."을 명시하지 않으면, "전역"으로 취급된다
예)
{
   ...
   function f()
   {
      ...
   }
   return f(); <<--- f()는 전역함수로 취급된다.
}
//클래스(Class) 만들기. 함수에서 var를 사용하여 변수를 만들고, 리턴하면 된다.
//자바에서는 멤버를 추가하기만 하면된다.
function new_MyClass(value)
{
	var a={value:0};//아무거나 하나만 우선 넣는다.
	a.min=0;//멤버변수 추가
	a.max=100;
	a.inc=function(delta)
	{
		this.vaue+=delta;//a가 아니라 this인 것에 주목!!
		if(this.vaue<this.min)
		{
			this.vaue=this.min;
		}
		else if(this.vaue>this.max)
		{
			this.vaue=this.max;
		}
	};
}
var a=new_MyClass(10);
console.log(a.vaue); a.inc(10); console.log(a.vaue);


Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함