들어가기 전에....


JavaScript에서 document에서 발전에서 Browser 쪽으로 접근하는 방향으로 진행을 할 것이다. 이는 DOM과 이전페이지, 새로운 탭등과 관계 있다. 이후에는 Network 부분으로 넘어가 Ajax, Json을 사용하는 방향으로 지식을 발전시켜 나갈 것이다.

자바스크립트의 보안


난독화를 해주는 제품도 있다(http://www.semdesigns.com/products/obfuscators/ECMAScriptObfuscationExample.html)

예제를 살펴보면 코드 난독화(Code Obfuscation) 전과 후의 모습을 볼 수 있다. 


Google은 Dart(https://www.dartlang.org/)라는 JavaScript를 이용한 새로운 플랫폼을 만들었다. type이 없고, 컴파일이 안되는 등의 불편함을 해소하고자 만든 것으로 보인다. 대규모의 웹이나 큰 프로젝트를 위해서는 이런 것들의 필요성이 대두 되는 것으로 보이며 구글은 이를 지속적으로 발전시켜 나가는 것으로 보인다.(내부적으로)



하루 평균 80%를 스마트 폰에서 보낸다. 하지만 10개 미만의 앱을 사용한다. 웹은 설치 없이 사용할 수 있어 좀더 접근이 용이할 수 있다.


프로토타입

프로토타입이란 어떤 객체의 원본이 되는 객체로 JavaScript는 이것을 이용해 객체를 생성해 나간다. 이러한 성질 때문에 JavaScript를 프로토타입 베이스 객체지향이라고도 불린다.(참조: http://www.nextree.co.kr/p7323/)


프로퍼티 설정 - 암묵적 참조


정적 프로퍼티와 정적 메소드(Static Property & Static Method)

객체를 생성하지 않고도 사용할 수 있는 프로퍼티와 메소드를 말한다.



 

다음과 같이 사용하는 것이 좋다고 한다.

1. 정적 프로퍼티는 기본적으로 읽기 전용(변경은 가능함)

2. 정적메소드 안에서는 this 키워드는 사용할 수 없다.

Namespace의 충돌을 피하기 위해서 많이 사용된다고 한다.


프로토타입의 삭제


Member.prototype.sex는 객체로 선언된 mem1.sex, mem2.sex를 삭제해도 없어지지 않는다. 이것은 mem1의 프로토타입를 삭제한것이기 때문이다. Memeber의 프로토타입을 삭제하기 위해서는 delete Member.prototype.sex 를 삭제해야 한다.


삭제에 대한 논의


아래와 같이 Global에 선언한 x는 delete가 가능한다. 하지만 variable로 선언한 y는 삭제 할 수 없다. 



JavaScript에서 x는 Global.x로 선언이 되는것이고, var y로 선언이 된것은 그냥 변수로 선언이 된것이기 때문이다.


Global에 대해서 ...

글로벌 객체는 JavaScript가 생성한 객체는 탑 레벨의 변수, 함수 이다. 이는 Global.~로 접근하거나 New Global등으로 생성할 수 없고 단지 변수명, 함수명으로 사용하는 객체이다. 대표적으로 isNaN이나 NaN, undefined 등이 그것이다.



Memory Management

다음 사이트를 찾조하자(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management)


객체 리터럴로 프로토타입 정의하기


객체의 프로토타입을 정의할 때 함수마다. Member.property.xxx를 계속 선언할 필요 없이 아래와 같이 선언하면 된다.

var Member = function(aName, bName){

   this.firstName = aName;

   this.lastName = bName;

}


Member.prototype = {

   getName : function() {  return this.lastName +' ' + this.firstName;},

   toString : function() { return this.lastName + this.firstName;}

} 






Posted by 빨간 양말