SlideShare a Scribd company logo
Javascript 101
Javascript 101
• 년에 에 의해 최초로 개발됨
• 이름 변천사  
• 웹페이지에서 최소한의 한 기능을 구현하기 위하여 도입
• 와의 브라우저 전쟁에서 나타났다고 볼 수 있음
• 현재 사용처
• 웹페이지를 동적으로 꾸미기 위해
• 서버에서도 사용
• 언어 포맷 자체는 다양한 사용처 등 에서 널리 사용되고 있음
• 버전
• 가장 최근 버전은 에서 사용 가능
• 일반적으로 안전하다 고 받아들여지는 버전은
• 일반적인 자바스크립트의 사용 안에서 사용된다
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8" />
<title>자바스크립트 페이지</title>
<script type="text/javascript">
document.write("<p>Hello World!</p>");
</script>
</head>
<body>
<noscript>
<p>브라우저가 자바스크립트 기능을 지원하지 않거나 자바스크립트 기능이 꺼져 있습니다.</p>
</noscript>
</body>
</html>
의 가지 구성요소
•
•
•
•
•
• 정확히 정해진 표준은 없음
•
와
• 와
• 는 에서 이름만 빌려왔다고 보는 것이 옳습니다
• 비슷한 계열 문법을 사용하지만 아예 다른 언어
•
•
• 의 언어적 특징은 사양에 정의됨 후에 로 등록
• 도 사양을 지원함
Javascript 101
값
•
주의 모든 숫자는 비트 부동소수점 숫자
•
•
•
•
•
// Numbers
var intNum = 42;
var floatNum = 3.14159;
// Logical
var logicalVar = true;
// Strings
var singleQuoteStr = 'Thanks for all the fish';
var doubleQuoteStr = "Thanks for all the fish";
// Undefined
var emptyVar;
// Null
var nullVar = null;
• 자바스크립트는 동적 타입 언어
• 필요할 때마다 자동으로 데이터 타입이 변환된다
• 예제
// 아래 코드는 오류를 발생시키지 않는다.
var answer = 42;
answer = "Thanks for all the fish...";
// Numeric과 String이 "+" 오퍼레이터로 결합된 경우
// 그 결과는 String이 된다.
x = "The ansower is " + 42; // "The answer is 42"
y = 42 + " is the answer"; // "42 is the answer"
// "+"가 아닌 다른 연산자에서는 Numeric을
// String으로 변환하지 않는다.
"37" - 7 // 30
"37" + 7 // "377"
// Unary plus operator
"1.1" + "1.1" = "1.11.1"
(+"1.1") + (+"1.1") = 2.2
변수
• 변수는 두 가지 방법으로 선언할 수 있다
• 변수 평가
• 아무 초기값을 가지지 않은 변수는 가 된다
• 한번도 선언되지 않은 변수에 대한 접근은 예외를 발생시킨다
// Local or global variable
var x = 42;
// Global variable
x = 42;
var a;
console.log("The value of a is " + a); // "The value of a is undefined."
console.log("The value of b is " + b); // ReferenceError exception!
Javascript 101
객체
• 자바스크립트에서 객체는 일종의
• 콘솔에서 라고 출력되는 모든 것이 객체
객체 만들기
• 객체 리터럴
• 같은 형태의 객체를 계속 만들 수
없음
• 프토토타입 객체로
을 가짐
• 생성자
• 프로토타입 객체로
자신 을 가짐
// Literal
var foo = {
name: 'foo',
age: 35,
gender: 'man'
};
console.dir(foo);
// Constructor
function Person(name, age, gender, position) {
this.name = name;
this.age = age;
this.gender = gender;
}
var bar = new Person('bar', 33, 'woman');
console.dir(bar);
var baz = new Person('baz', 25, 'woman');
console.dir(baz);
를 빼먹으면 어떻게 되나요
• 일반 함수와 생성자 함수에는 차이가 거의
없다
• 차이점 바인딩
• 일반 함수 호출 가 현재 보통은
또는 호출한 객체 에 바인딩된다
• 를 통한 생성자 호출 가 새로 생성되는
빈 객체에 바인딩된다
• 차이점 리턴값
• 일반 함수 리턴값이 없으면 를 리턴
• 생성자 함수 자동으로 새로 생성된
객체 를 리턴
// 앞 장의 예제에 이어서...
var qux = Person('qux', 20, 'man');
console.log(qux); // Undefined
console.log(window.name); // qux
console.log(window.age); // 20
console.log(wondow.gender); // man
• 자신의 부모 프로토타입 객체 를 가리키는 숨겨진 프로퍼티
• 생성자 함수는 자신과 링크된 프로토타입 객체를 으로 가리킴
객체
// Person 생성자 함수
function Person(name) {
this.name = name;
}
// foo 객체 생성
var foo = new Person('foo');
console.dir(Person);
console.dir(foo);
• 모든 객체는 자신을 생성한 생성자 함수의
프로퍼티가 가지는 객체를 자신의
프로토타입 객체로 취급한다
• 자신이 가지고 있지 않은 프로퍼티지만
프로토타입 객체가 가지고 있다면 자신의
것처럼 사용할 수 있다
• 예
// 앞선 예제에서 이어서...
console.log(Foo.hasOwnProperty('name'));
// true
객체
기본 오브젝트 데이터 타입 확장
• 어떠한 오브젝트라도 추가적으로 기능을
부여하여 확장할 수 있다
• 에서는 모든 기본 메서드들은
프로토타입 객체 내의 메서드로 정의해야 한다고 되어
있음
• 예
String.prototype.testMethod = function() {
console.log('Thanks for all the fish!');
};
var str = 'String';
str.testMethod(); // Thanks for all the fish!
console.dir(String.prototype);
변경하기
• 은 과연 바꿀 수 있을까
• 디폴트 프로토타입 객체는 함수가 생성될 때 같이 생성 함수의 프로퍼티에 연결
• 이 연결은 중간에 변경이 가능 단 소급적용은 불가
function Person(name) {
this.name = name;
}
var foo = new Person('foo');
console.log(foo.name, foo.country); // foo undefined
Person.prototype = {
country: 'korea',
};
var bar = new Person('bar');
console.log(foo.name, foo.country); // foo undefined
console.log(bar.name, bar.country); // bar korea
Javascript 101
• 순수한 함수
• 외부에 아무런 영향을 끼치지 않는 함수
• 동시에 여러 함수를 실행 가능 병렬처리
• 같은 입력값이 들어오면 항상 같은 값을 반환해야 한다
• 고계 함수
• 함수를 값으로 간주하여 인자 또는 반환값으로 사용
y = f(x) * f(x)
z = f(x);
y = z * z;
function makeAddPrefixFunc(prefix)
return function (val) {
return prefix + val;
}
}
클로저
• 이미 생명 주기가 끝난 외부 함수의 변수를 참조하는 함수 를 클로저라 한다
• 일반적인 클로저 패턴
var pet = function(name) { // 외부 함수는 name이라는 변수를 파라미터로 받는다.
var getName = function() {
return name; // 내부의 함수는 바깥의 함수에서 선언된 name변수를 볼 수 있다.
}
return getName; // 방금 선언한 함수 자체를 반환한다.
},
myPet = pet("Vivie");
myPet(); // Returns "Vivie"
클로저
• 좀 더 실용적인 예제
function makeSizer(size) {
return function() {
document.body.style.fontSize = size + 'px';
};
}
var size12 = makeSizer(12);
var size14 = makeSizer(14);
var size16 = makeSizer(16);
document.getElementById('size-12').onclick = size12;
document.getElementById('size-14').onclick = size14;
document.getElementById('size-16').onclick = size16;
<a href="#" id="size-12">12</a>
<a href="#" id="size-14">14</a>
<a href="#" id="size-16">16</a>
Javascript 101
• 의 상속은 프로토타입을 사용하여 구현된다
var person = {
name : "Duglas Adams",
getName : function() {
return this.name;
},
setName : function(arg) {
this.name = arg;
}
}
function create_object(o) {
function F() {}
F.prototype = o;
return new F();
}
var adams = create_object(person);
adams.setName("choo");
console.log(adams.getName());
// Person 클래스 정의
function Person() {}
Person.prototype.walk = function(){
alert ('I am walking!');
};
Person.prototype.sayHello = function(){
alert ('hello');
};
// Student 클래스 정의
function Student() {
// Call the parent constructor
Person.call(this);
}
// Person을 상속한다.
Student.prototype = new Person();
// Student의 constructor가 기본적으로 Person을 보므로 고친다.
Student.prototype.constructor = Student;
// sayHello 메서드를 변경 (오버라이드) 한다.
Student.prototype.sayHello = function(){
alert('hi, I am a student');
}
// add sayGoodBye method
Student.prototype.sayGoodBye = function(){
alert('goodBye');
}
var student1 = new Student();
student1.sayHello();
student1.walk();
student1.sayGoodBye();
// check inheritance
alert(student1 instanceof Person); // true
alert(student1 instanceof Student); // true
• 에는 와 같은 키워드가 존재하지 않음
• 모든 프로퍼티를 바깥에서 접근이 가능 클로져를 사용하여 비슷한 것을 만들 수 있음
var Person = function(arg) {
var name = arg ? arg : "42";
return {
getName : function() {
return name;
},
setName : function(arg) {
name = arg;
}
};
}
var me = new Person();
console.log(me.getName()); // 42
Javascript 101

More Related Content

PPTX
Nodejs, PhantomJS, casperJs, YSlow, expressjs
기동 이
 
PDF
진짜기초 Node.js
Woo Jin Kim
 
PDF
처음배우는 자바스크립트, 제이쿼리 #1
성일 한
 
ODP
Django와 flask
Jiho Lee
 
PPTX
4-3. jquery
JinKyoungHeo
 
PPTX
09장 객체와 클래스 (고급)
유석 남
 
PDF
Html5 web workers
Woo Jin Kim
 
PPTX
Angular2 가기전 Type script소개
Dong Jun Kwon
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
기동 이
 
진짜기초 Node.js
Woo Jin Kim
 
처음배우는 자바스크립트, 제이쿼리 #1
성일 한
 
Django와 flask
Jiho Lee
 
4-3. jquery
JinKyoungHeo
 
09장 객체와 클래스 (고급)
유석 남
 
Html5 web workers
Woo Jin Kim
 
Angular2 가기전 Type script소개
Dong Jun Kwon
 

What's hot (20)

PDF
처음배우는 자바스크립트, 제이쿼리 #4
성일 한
 
PDF
Node.js intro
Chul Ju Hong
 
PDF
회사에서 써보는 SQLAlchemy
Jc Kim
 
PDF
ReactJS | 서버와 클라이어트에서 동시에 사용하는
Taegon Kim
 
PDF
[JavaScript Library] - Simple jQuery
문학청년
 
PPTX
플라스크 템플릿
Thomas Hyunsik Kim
 
PPTX
5-5. html5 connectivity
JinKyoungHeo
 
PPTX
Web Components 101 polymer & brick
yongwoo Jeon
 
PDF
Handlebars
Han Jung Hyun
 
PDF
JSP 프로그래밍 #05 HTML과 JSP
Myungjin Lee
 
PPTX
4-1. javascript
JinKyoungHeo
 
PPTX
Javascript 를 perl에서 mini-language 로 사용하기
HyunSeung Kim
 
PPTX
4-2. ajax
JinKyoungHeo
 
PDF
JSP 프로그래밍 #03 서블릿
Myungjin Lee
 
PPT
자바야 놀자 PPT
JinKyoungHeo
 
PPTX
5-4. html5 offline and storage
JinKyoungHeo
 
PPTX
Node js[stg]onimusha 20140822
병헌 정
 
PPTX
Startup JavaScript 7 - Node.JS 기초
Circulus
 
PDF
안드로이드 개발자를 위한 스위프트
병한 유
 
PPTX
파이썬 언어 기초
beom kyun choi
 
처음배우는 자바스크립트, 제이쿼리 #4
성일 한
 
Node.js intro
Chul Ju Hong
 
회사에서 써보는 SQLAlchemy
Jc Kim
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
Taegon Kim
 
[JavaScript Library] - Simple jQuery
문학청년
 
플라스크 템플릿
Thomas Hyunsik Kim
 
5-5. html5 connectivity
JinKyoungHeo
 
Web Components 101 polymer & brick
yongwoo Jeon
 
Handlebars
Han Jung Hyun
 
JSP 프로그래밍 #05 HTML과 JSP
Myungjin Lee
 
4-1. javascript
JinKyoungHeo
 
Javascript 를 perl에서 mini-language 로 사용하기
HyunSeung Kim
 
4-2. ajax
JinKyoungHeo
 
JSP 프로그래밍 #03 서블릿
Myungjin Lee
 
자바야 놀자 PPT
JinKyoungHeo
 
5-4. html5 offline and storage
JinKyoungHeo
 
Node js[stg]onimusha 20140822
병헌 정
 
Startup JavaScript 7 - Node.JS 기초
Circulus
 
안드로이드 개발자를 위한 스위프트
병한 유
 
파이썬 언어 기초
beom kyun choi
 
Ad

Viewers also liked (9)

PDF
Grunt
Sungwoo Choo
 
PDF
Javascript 객체생성패턴
KIM HEE JAE
 
PPTX
생코자바스크립트스터디3장
Jinhwa Hong
 
PPTX
스파르탄Js in sidejs4
Jin-Hyun Park
 
PDF
Wildgoose 최종데모
KIM HEE JAE
 
PPTX
스파르탄Js in sidejs5
Jin-Hyun Park
 
PDF
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
Sungwoo Choo
 
PPTX
자바스크립트 기초
Eunyoung Hong
 
PDF
php 시작하기
Yoonwhan Lee
 
Javascript 객체생성패턴
KIM HEE JAE
 
생코자바스크립트스터디3장
Jinhwa Hong
 
스파르탄Js in sidejs4
Jin-Hyun Park
 
Wildgoose 최종데모
KIM HEE JAE
 
스파르탄Js in sidejs5
Jin-Hyun Park
 
NAVER 오픈세미나 대구 (2014.08.01) - 오픈소스 라이브러리를 활용한 네이티브 어플리케이션의 데이터 저장과 통신
Sungwoo Choo
 
자바스크립트 기초
Eunyoung Hong
 
php 시작하기
Yoonwhan Lee
 
Ad

Similar to Javascript 101 (20)

PPTX
프론트엔드스터디 E05 js closure oop
Young-Beom Rhee
 
PPTX
Javascript
Joshua Yoon
 
DOCX
Javascript 완벽 가이드 정리
ETRIBE_STG
 
PDF
Javascript 교육자료 pdf
Hyosang Hong
 
PPT
헷갈리는 자바스크립트 정리
은숙 이
 
PPTX
자바스크립트 패턴 3장
Software in Life
 
PPTX
0.javascript기본(~3일차내)
Sung-hoon Ma
 
PDF
JavaScript Patterns - Chapter 3. Literals and Constructors
Hyuncheol Jeon
 
PPTX
Startup JavaScript 4 - 객체
Circulus
 
PPTX
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
Young-Beom Rhee
 
PDF
ES6 for Node.js Study 5주차
승빈이네 공작소
 
PDF
Start IoT with JavaScript - 4.객체1
Park Jonggun
 
PDF
Start IoT with JavaScript - 7.프로토타입
Park Jonggun
 
PDF
외계어 스터디 3/5 function and object
민태 김
 
PDF
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
EcmaScript6(2015) Overview
yongwoo Jeon
 
PPT
Java script
영남 허
 
PPTX
프론트엔드스터디 E04 js function
Young-Beom Rhee
 
PDF
Javascript
Hong Hyo Sang
 
PPTX
자바스크립트 기초문법~함수기초
진수 정
 
프론트엔드스터디 E05 js closure oop
Young-Beom Rhee
 
Javascript
Joshua Yoon
 
Javascript 완벽 가이드 정리
ETRIBE_STG
 
Javascript 교육자료 pdf
Hyosang Hong
 
헷갈리는 자바스크립트 정리
은숙 이
 
자바스크립트 패턴 3장
Software in Life
 
0.javascript기본(~3일차내)
Sung-hoon Ma
 
JavaScript Patterns - Chapter 3. Literals and Constructors
Hyuncheol Jeon
 
Startup JavaScript 4 - 객체
Circulus
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
Young-Beom Rhee
 
ES6 for Node.js Study 5주차
승빈이네 공작소
 
Start IoT with JavaScript - 4.객체1
Park Jonggun
 
Start IoT with JavaScript - 7.프로토타입
Park Jonggun
 
외계어 스터디 3/5 function and object
민태 김
 
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
EcmaScript6(2015) Overview
yongwoo Jeon
 
Java script
영남 허
 
프론트엔드스터디 E04 js function
Young-Beom Rhee
 
Javascript
Hong Hyo Sang
 
자바스크립트 기초문법~함수기초
진수 정
 

Javascript 101

  • 3. • 년에 에 의해 최초로 개발됨 • 이름 변천사   • 웹페이지에서 최소한의 한 기능을 구현하기 위하여 도입 • 와의 브라우저 전쟁에서 나타났다고 볼 수 있음 • 현재 사용처 • 웹페이지를 동적으로 꾸미기 위해 • 서버에서도 사용 • 언어 포맷 자체는 다양한 사용처 등 에서 널리 사용되고 있음 • 버전 • 가장 최근 버전은 에서 사용 가능 • 일반적으로 안전하다 고 받아들여지는 버전은
  • 4. • 일반적인 자바스크립트의 사용 안에서 사용된다 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html" charset="UTF-8" /> <title>자바스크립트 페이지</title> <script type="text/javascript"> document.write("<p>Hello World!</p>"); </script> </head> <body> <noscript> <p>브라우저가 자바스크립트 기능을 지원하지 않거나 자바스크립트 기능이 꺼져 있습니다.</p> </noscript> </body> </html>
  • 5. 의 가지 구성요소 • • • • • • 정확히 정해진 표준은 없음 •
  • 6. 와 • 와 • 는 에서 이름만 빌려왔다고 보는 것이 옳습니다 • 비슷한 계열 문법을 사용하지만 아예 다른 언어 • • • 의 언어적 특징은 사양에 정의됨 후에 로 등록 • 도 사양을 지원함
  • 8. 값 • 주의 모든 숫자는 비트 부동소수점 숫자 • • • • • // Numbers var intNum = 42; var floatNum = 3.14159; // Logical var logicalVar = true; // Strings var singleQuoteStr = 'Thanks for all the fish'; var doubleQuoteStr = "Thanks for all the fish"; // Undefined var emptyVar; // Null var nullVar = null;
  • 9. • 자바스크립트는 동적 타입 언어 • 필요할 때마다 자동으로 데이터 타입이 변환된다 • 예제 // 아래 코드는 오류를 발생시키지 않는다. var answer = 42; answer = "Thanks for all the fish..."; // Numeric과 String이 "+" 오퍼레이터로 결합된 경우 // 그 결과는 String이 된다. x = "The ansower is " + 42; // "The answer is 42" y = 42 + " is the answer"; // "42 is the answer" // "+"가 아닌 다른 연산자에서는 Numeric을 // String으로 변환하지 않는다. "37" - 7 // 30 "37" + 7 // "377" // Unary plus operator "1.1" + "1.1" = "1.11.1" (+"1.1") + (+"1.1") = 2.2
  • 10. 변수 • 변수는 두 가지 방법으로 선언할 수 있다 • 변수 평가 • 아무 초기값을 가지지 않은 변수는 가 된다 • 한번도 선언되지 않은 변수에 대한 접근은 예외를 발생시킨다 // Local or global variable var x = 42; // Global variable x = 42; var a; console.log("The value of a is " + a); // "The value of a is undefined." console.log("The value of b is " + b); // ReferenceError exception!
  • 12. 객체 • 자바스크립트에서 객체는 일종의 • 콘솔에서 라고 출력되는 모든 것이 객체
  • 13. 객체 만들기 • 객체 리터럴 • 같은 형태의 객체를 계속 만들 수 없음 • 프토토타입 객체로 을 가짐 • 생성자 • 프로토타입 객체로 자신 을 가짐 // Literal var foo = { name: 'foo', age: 35, gender: 'man' }; console.dir(foo); // Constructor function Person(name, age, gender, position) { this.name = name; this.age = age; this.gender = gender; } var bar = new Person('bar', 33, 'woman'); console.dir(bar); var baz = new Person('baz', 25, 'woman'); console.dir(baz);
  • 14. 를 빼먹으면 어떻게 되나요 • 일반 함수와 생성자 함수에는 차이가 거의 없다 • 차이점 바인딩 • 일반 함수 호출 가 현재 보통은 또는 호출한 객체 에 바인딩된다 • 를 통한 생성자 호출 가 새로 생성되는 빈 객체에 바인딩된다 • 차이점 리턴값 • 일반 함수 리턴값이 없으면 를 리턴 • 생성자 함수 자동으로 새로 생성된 객체 를 리턴 // 앞 장의 예제에 이어서... var qux = Person('qux', 20, 'man'); console.log(qux); // Undefined console.log(window.name); // qux console.log(window.age); // 20 console.log(wondow.gender); // man
  • 15. • 자신의 부모 프로토타입 객체 를 가리키는 숨겨진 프로퍼티 • 생성자 함수는 자신과 링크된 프로토타입 객체를 으로 가리킴 객체 // Person 생성자 함수 function Person(name) { this.name = name; } // foo 객체 생성 var foo = new Person('foo'); console.dir(Person); console.dir(foo);
  • 16. • 모든 객체는 자신을 생성한 생성자 함수의 프로퍼티가 가지는 객체를 자신의 프로토타입 객체로 취급한다 • 자신이 가지고 있지 않은 프로퍼티지만 프로토타입 객체가 가지고 있다면 자신의 것처럼 사용할 수 있다 • 예 // 앞선 예제에서 이어서... console.log(Foo.hasOwnProperty('name')); // true 객체
  • 17. 기본 오브젝트 데이터 타입 확장 • 어떠한 오브젝트라도 추가적으로 기능을 부여하여 확장할 수 있다 • 에서는 모든 기본 메서드들은 프로토타입 객체 내의 메서드로 정의해야 한다고 되어 있음 • 예 String.prototype.testMethod = function() { console.log('Thanks for all the fish!'); }; var str = 'String'; str.testMethod(); // Thanks for all the fish! console.dir(String.prototype);
  • 18. 변경하기 • 은 과연 바꿀 수 있을까 • 디폴트 프로토타입 객체는 함수가 생성될 때 같이 생성 함수의 프로퍼티에 연결 • 이 연결은 중간에 변경이 가능 단 소급적용은 불가 function Person(name) { this.name = name; } var foo = new Person('foo'); console.log(foo.name, foo.country); // foo undefined Person.prototype = { country: 'korea', }; var bar = new Person('bar'); console.log(foo.name, foo.country); // foo undefined console.log(bar.name, bar.country); // bar korea
  • 20. • 순수한 함수 • 외부에 아무런 영향을 끼치지 않는 함수 • 동시에 여러 함수를 실행 가능 병렬처리 • 같은 입력값이 들어오면 항상 같은 값을 반환해야 한다 • 고계 함수 • 함수를 값으로 간주하여 인자 또는 반환값으로 사용 y = f(x) * f(x) z = f(x); y = z * z; function makeAddPrefixFunc(prefix) return function (val) { return prefix + val; } }
  • 21. 클로저 • 이미 생명 주기가 끝난 외부 함수의 변수를 참조하는 함수 를 클로저라 한다 • 일반적인 클로저 패턴 var pet = function(name) { // 외부 함수는 name이라는 변수를 파라미터로 받는다. var getName = function() { return name; // 내부의 함수는 바깥의 함수에서 선언된 name변수를 볼 수 있다. } return getName; // 방금 선언한 함수 자체를 반환한다. }, myPet = pet("Vivie"); myPet(); // Returns "Vivie"
  • 22. 클로저 • 좀 더 실용적인 예제 function makeSizer(size) { return function() { document.body.style.fontSize = size + 'px'; }; } var size12 = makeSizer(12); var size14 = makeSizer(14); var size16 = makeSizer(16); document.getElementById('size-12').onclick = size12; document.getElementById('size-14').onclick = size14; document.getElementById('size-16').onclick = size16; <a href="#" id="size-12">12</a> <a href="#" id="size-14">14</a> <a href="#" id="size-16">16</a>
  • 24. • 의 상속은 프로토타입을 사용하여 구현된다 var person = { name : "Duglas Adams", getName : function() { return this.name; }, setName : function(arg) { this.name = arg; } } function create_object(o) { function F() {} F.prototype = o; return new F(); } var adams = create_object(person); adams.setName("choo"); console.log(adams.getName());
  • 25. // Person 클래스 정의 function Person() {} Person.prototype.walk = function(){ alert ('I am walking!'); }; Person.prototype.sayHello = function(){ alert ('hello'); }; // Student 클래스 정의 function Student() { // Call the parent constructor Person.call(this); } // Person을 상속한다. Student.prototype = new Person(); // Student의 constructor가 기본적으로 Person을 보므로 고친다. Student.prototype.constructor = Student; // sayHello 메서드를 변경 (오버라이드) 한다. Student.prototype.sayHello = function(){ alert('hi, I am a student'); } // add sayGoodBye method Student.prototype.sayGoodBye = function(){ alert('goodBye'); } var student1 = new Student(); student1.sayHello(); student1.walk(); student1.sayGoodBye(); // check inheritance alert(student1 instanceof Person); // true alert(student1 instanceof Student); // true
  • 26. • 에는 와 같은 키워드가 존재하지 않음 • 모든 프로퍼티를 바깥에서 접근이 가능 클로져를 사용하여 비슷한 것을 만들 수 있음 var Person = function(arg) { var name = arg ? arg : "42"; return { getName : function() { return name; }, setName : function(arg) { name = arg; } }; } var me = new Person(); console.log(me.getName()); // 42