문서 객체 모델(DOM)이란?
Document Object Model 은 XML이나 HTML 문서에 접근하기 위한 일종의 인터페이스이다.
DOM은 문서 내의 모든 요소를 정의하고, 각각의 요소에 접근하는 방법을 제공한다.
계층 구조로 표현되며, 프로그래밍 언어가 문서 구조, 스타일, 내용 등을 변경할 수 있도록 한다.
Core DOM : 모든 문서 타입을 위한 DOM 모델
HTML DOM : HTML 문서를 위한 DOM 모델
XML DOM : XML 문서를 위한 DOM 모델
Document 객체란?
웹 페이지를 의미한다. 웹에 존재하는 HTML 요소에 접근하고자 할 때는 Document객체부터 시작해야한다.
Document 메소드를 통해 HTML 요소에 관련된 작업을 수행한다.
HTML 요소 선택 메소드 | 설명 |
---|---|
document.getElementById(아이디) | 해당 아이디의 요소를 선택 |
document.getElementByClassName(클래스이름) | 클래스에 속한 요소 모두 선택 |
document.getElementsByTagName(태그이름) | 해당 태그 이름의 요소를 모두 선택 |
document.getElementsByName(name속성값) | 해당 name 속성값을 가지는 요소를 모두 선택 |
document.querySelectorAll(선택자) | 해당 선택자로 선택되는 요소를 모두 선택 |
document.querySelector(선택자) | 해당 선택자로 선택되는 요소를 1개 선택 |
HTML 요소 생성 메소드 | 설명 |
---|---|
document.createElement(HTML요소) | 지정된 HTML 요소를 생성 |
document.write(텍스트) | HTML 출력 스트림을 통해 텍스트를 출력 |
HTML 이벤트 핸들러 추가 메소드 | 설명 |
---|---|
요소.onclick = function(){ 실행할 코드 } | 마우스 클릭 이벤트와 연결될 이벤트 핸들러 |
var selectedTag = document.getElementByTagName("div");
// 선택된 요소의 색상 변경
selectedTag.style.color = "blue";
// 내용 변경
selectedTag.innerHTML = "HELLO WORLD";
Node란?
HTML DOM에서 정보를 저장하는 계층적 단위를 말한다.
HTML 문서의 정보는 노드 트리라고 불리는 계층적 구조에 저장이 되는데, 노드 트리는 노드들의 집합으로 노드 간의 관계를 보여준다.
자바 스크립트에서는 HTML DOM을 이용하여 노드 트리에 포함된 모든 노드에 접근 할 수 있다.
노드간의 관계를 이용하여 접근하는 방법
getElementsByTagName() 메소드를 이용하는 방법
// nodeName을 이용하여 노드 이름에 접근
document.childNodes[0].nodeName;
// nodeValue를 사용해 노드값에 접근
document.getElementById("first").firstChild.nodeValue;
// nodeType을 사용하여 노드 타입에 접근
document.getElementById("first").firstChild.nodeType;
💡 실행 컨텍스트란?
코드가 실행되기 위해 필요한 정보들을 가진 범위를 추상화 하기 위해 객체 형태로 나타낸 것으로 실행 가능한 코드가 실행되기 위해 필요한 환경이라고 생각하면 된다.
실행 컨텍스트는 논리적 스택 구조를 가진다. 함수를 실행하면 실행 컨텍스트가 생성이 되고, 또 다른 함수가 실행이 되면 그 위에 실행 컨텍스트가 생성되어, 스택구조로 콜스택 메모리에 쌓인다.
💡 메모
자바스크립트가 실행될 때 전역 실행 컨텍스트 생성
함수가 실행될 때 함수 실행 컨텍스트 생성
💡 this란?
this는 일반적으로 메서드를 호출한 객체가 저장되어 있는 속성을 의미한다.
바인딩이란?
식별자와 값을 연결하는 과정으로 this 바인딩은 this와 this가 가르킬 객체를 바인딩 하는 것이다.
- 함수의 호출환경에 따라 this는 동적으로 세팅된다.
- this가 환경에 따라 바뀌는 것을 동적 바인딩이라 한다.
- bind, apply, call 메서드 사용 시, 메서드의 첫번째 인수로 전달하는 객체에 this가 바인딩 된다. (명시적 바인딩)
console.log(this)
// Window {0: global, 1: global, 2: global, …}
javascript에서 가장 평범하게
this
를 호출한다면this
는window
객체를 가르킨다.
// 1. 일반 함수내에서 호출
function test() {
console.log(this); //this는 window
// 2. 함수 안의 함수 내부에서 호출
function test2(){
console.log(this); //this는 window
}
}
함수 안에서 this는 함수의 주인에게 바인딩 되는데 함수의 주인은
window
객체이다. 함수 안에서 또 함수를 선언하더라도this
는window
이다.
var student = {
name : "jenny",
hello : function(){
console.log("hello my name is " + this.name);
//여기서 this는 객체인 student를 가리킨다.
}
student.hello(); // hello my name is jenny
this
는 해당 메소드를 소유한 객체에 바인딩 된다.
생성자 함수
- 함수이름의 첫글자는 대분자로 시작
- 반드시 new
연산자를 붙여 실행
function Fruit(name) {
this.name = name;
}
var apple = new Fruit('apple');
console.log(apple.name); //apple
생성자 함수가 생성하는 객체로
this
가 바인딩 된다.
function Student(){
console.log(this);
}
var name = {
name : "jenny"
}
Student.call(name); // {name:"jenny"}
this
는 특정 객체에 바인딩이 된다.
화살표 함수의 this는 호출된 함수를 둘러싼 실행 컨텍스트를 가리키지만 일반 함수의 this는 새롭게 생성된 실행 컨텍스트를 가리킨다.
참고:
1. 참고 velog
2. 참고
3. 참고