javascript에서 객체 정의
이 글은 javascript에서 객체를 정의하기 위해 자주 사용하는 방법에 대한 기록이다.
프로그래밍에서 객체는?
- 객체의 기본 개념은 알아서…
- 객체지향에 대한 공부도 각자 알아서…
- 이 글에서 중요한 내용은 객체가 상태(status), 행위(behavior)를 가지고 있다는 것.
-
상태란 속성(property) 또는 필드(field)로 구현될 수 있고, 행위는 메서드(method) 또는 함수(function)으로 구현 될 수 있다.
- 예를 들어
사람
이란 객체- 이름(상태)
- 나이(상태)
- 말하기(행위)
- …
- 상속? 남자사람, 여자사람…
javascript에서 객체를 만드는 기본틀
- function을 이용하는 방법
var person = function() {..};
- object 리터럴을 이용하는 방법
var preson = {..};
모던하면서 일반적인 방법은 다 function을 사용한다.
1. method를 내장 하는 방법
var Person = function(name, age) { this.name = name; this.age = age; var _speaked = false; this.speak = function(msg) { console.log(msg); _speaked = true; } this.hasBeenSpeaked = function() { return _speaked; } } //사용 var person = new Person('조원홍', 27); if (!person.hasBeenSpeaked) { person.speak('소리질러'); }
- 모든 속성과 메서드를 하나의 function안에 한꺼번에 정의 한다.
- var로 정의 한 변수는 private member처럼 쓸 수 있다.
- this로 정의한 변수는 public member처럼 쓸 수 있다.
- 문제는 인스턴스가 생성될때 마다 모든 member들이 재생성 된다. 이건 완전 비효율이지.
2. prototype사용
var Person = function(name, age) { this.name = name; this.age = age; this.speaked = false; //scope이 다르기 때문에 prototype에 정의된 메서드에서 사용불가 var _speaked = false; } Person.prototype.speak = function(msg) { console.log(msg); speaked = true; } Person.prototype.hasBeenSpeaked = function() { return this.speaked; } //사용 var person = new Person('조원홍', 27); if (person.hasBeenSpeaked() === false) { person.speak('소리질러'); } //상속은? var Woman = function() { } Woman.prototype = new Person();
- 정의된 객체에 prototype을 이용해 속성이나 메서드를 추가할 수 있다.
- 상속이라기 보다는 상속 비스무리한것? 어쨋거나 프로토타입체인을 이용해서 상속의 효과를 얻을 수 있다.
3. module pattern
var Person = function(name, age) { var _speaked = false; var privateMethod = function() { } return { name: name, age: age, speak: function(msg) { console.log(msg); _speaked = true; }, hasBeenSpeaked: function() { return _speaked; } } } //사용 var person = Person('조원홍', 27); if (person.hasBeenSpeaked() === false) { person.speak('소리질러'); }
- 객체를 반환할 경우
new
키워드 생략 가능 - prototype속성은 아무런 영향을 미치지 못한다.
- 상속이 어렵다. 상속하려면 모든 메소드를 각각 복제해야 한다.
- 내장 패턴과 마찬가지로 메모리를 좀더 사용한다.
참고의 참고로 es6에서 class
import OtherModule from 'other-module'; class Person { constructor(name, age) { this.name = name; this.age = age; } speak(message) { console.log(message); } } export default Person;
- 상속도 좀더 편하게
import Person from './persion'; // persion.js export default class Woman extends Persion { constructor(name, age) { super(name, age); } speak(message) { super.speak(message); console.log('Woman message: ' + message) } }
- hoisting문제가 있다.
- 보통은 서버모듈을 구성하거나 babel, webpack같은 빌드툴을 이용한 라이브러리 개발시 좋다.
- 앞으로는 이런 방향이 일반화 될것. 2,3년?
참조
ASP.NET
- OS X(10.11)에 ASP.NET Application
- OS X(10.10)에 ASP.NET 5 설치하기
- MVC Web Application에서 재사용 가능한 Authentication라이브러리 만들기
- 맥에서 ASP.NET vNext 애플리케이션 개발하기
- ASP.NET 5소개
- ASP.NET 5와 MVC 6에서 바뀌게 되는 기능 Top 10
- ASP.NET 5 스케폴딩(Scaffolding)
- MVC Controller와 ApiController의 차이점
- ASP.NET Accounts Management
- MVC를 이용해 RealGrid에 데이터를 표현하기
EF
Visual Studio
- Visual Studio Code v0.3.0
- 무서운 EF
- 해결 방법을 찾을 수 없습니다.
- GitHub Extension for Visual Studio
- Visual Studio Code for Mac
- 패러렐즈 Visual Studio Text Editor 스크롤을 부드럽게 하는 방법
Another Code
- BitBucket!! 너는 또 뭐야?
- Git! 너 뭐야?
- 슬랙앱 만들기
- 품질의 기본
- 대화의 수준
- javascript tutorial
- html tutorial
- OS X에서 Paralles Windows 10 VM의 localhost 사이트에 접속하는 방법
- OS X(10.11)에서 MongoDB
- OS X(10.11)에서 SVN(Subversion)
- OS X(10.11)에서 아파치웹서버 구동하기 (Virtual Hosting 구현)
- OS X(10.11)에서 메이븐(Maven)사용하기
- Jasmine을 이용한 Javascript 테스트
- Identicon
- 회사의 슬픔
- 지킬에서 사이드 메뉴 필터링 하기
- ASP.NET MVC vs WEB API
- 티스토리에서 구문 하이라이팅 기능 구현하기
Javascript
- react를 위한 webpack정리 (II) - 작성중
- react를 위한 webpack정리 (I)
- javascript에서 객체 정의
- Javascripting
- aws-ec2-amazon linux-nodejs
- Protractor
- AngulaJS 연습
티스토리(1) tistory(1) syntax highlighting(1) Visual Studio(3) ASP.NET(4) EF(3) RealGrid(2) Jekyll(2) GitHub(3) SqlServer(1) SqlServer 2014(1) MVC(2) ASP.NET 5(7) Identity(2) Account(1) Controller(1) ApiController(1) 스케폴딩(2) Schaffolding(2) MVC 6(1) 페러렐즈(2) Parallels(1) Liquid(1) Authentication(1) Entity Framework(2) Visual Studio Code(2) VS(2) VisualStudio(2) Visual Studio 2015(2) VS 2015(2) Extension(1) 잡설(3) Update-Database(1) Entension(1) 일을하지말아야지(1) osx(2) DNX(2) Iendticon(1) Jasmine(1) AngularJS(2) protractor(1) maven(1) java(1) OSX(5) yosemite(2) 메이븐(1) 요세미티(1) 서브라임(1) 아파치(2) apache(1) webserver(1) 웹서버(1) virtualhost(1) svn(1) subversion(1) 몽고디비(1) mongodb(2) localhost(1) 호스팅(1) hosting(1) VSCode(1) html(1) JavaScript(1) nodejs(2) aws(2) ec2(2) git(4) javascript(5) object(1) webpack(2) reactjs(2) react(2) browserify(2) 웹팩(3) 리액트(3) slack(1) api(1) slack app(1) 슬랙 앱(1) 깃(2) 깃허브(1) github(1) 비트버킷(1) BitBucket(1)