(41)

[JavaScript] 자바스크립트의 this

this 자바의 this와는 다르게 클래스에 종속되지 않으며 자바스크립트에서의 this는 함수의 호출방식에 따라 가져오는 객체가 달라지므로 this의 사용 위치가 중요하다. 기본적으로는 최상위객체인 window를 가리킨다. console.log(this); // window function test1(){ console.log("test1 ", this); // test1 window function test2(){ console.log("test2 ", this); // test2 window } test2(); } test1(); 함수 안에서의 this 함수 안에서의 this는 함수의 주인에게 바인딩된다. 아래의 예시에서 this.num의 this는 window객체를 가리킨다. var num = 0;..

[JavaScript] 타이머 함수 (setTimeout, setInterval, clearTimeout, clearInterval)

타이머 Window 객체의 메서드 중 하나이며 익명, 기명함수를 통해 값을 제어한다. 일정시간이 지난 뒤 함수를 호출하거나, 특정 함수를 지속적으로 반복하여 실행할 때 사용한다. ms단위를 사용한다. setTimeout / clearTimeout 지정한 시간 이후, 단 한번만 지정된 콜백함수 호출 clearTimeout을 통해 setTimeout 호출 취소 See the Pen Untitled by magic (@mag11c) on CodePen. setInterval / clearInterval 지정된 시간 간격마다 지정된 함수를 반복적으로 호출 및 호출취소 See the Pen Untitled by magic (@mag11c) on CodePen.

[JavaScript] 이벤트(Event)

목차 이벤트(Event) 사용자가 버튼을 눌렸을 때, 웹 페이지가 로드될 때, 특정 영역에 마우스가 올라갔을 때 등등등. 이벤트의 요소는 다양하다. 이 이벤트들은 DOM요소와 관련이 깊다. ​이벤트가 발생하면 무언가가 이를 감지할 수 있어야 하며, 그에 대응하는 반응을 하여야 한다. 이를 위해 이벤트는 일반적으로 함수에 연결되며 그 함수는 이벤트가 발생하기 전에는 실행되지 않다가 이벤트가 발생되면 실행된다. ​이 함수를 이벤트 핸들러라 하며 이벤트에 대응하는 처리를 기술한다. 이벤트리스너와 이벤트핸들러 이벤트 핸들러는 addEventListener() 메서드를 사용하지 않고 이벤트와 함수를 연결하는 것이다. 이벤트 종류 UI Event Event 설명 load 웹, 스크립트 페이지 로드 완료시 unloa..

[JavaScript] 객체(Object)

객체(Object) 생성자를 통해 객체를 만들 수 있으며, 객체를 직관적으로 선언하여 사용할 수 있다. Key, Value로 구성된 속성(프로퍼티)들의 집합이다. 자바스크립트의 함수를 프로퍼티에 사용할 수 있으며, 객체 내부에 선언된 함수를 메서드라 한다. 자바스크립트의 객체는 프로퍼티와 그 객체에 관련된 동작(메서드)를 모두 포함할 수 있다. 프로토타입 객체의 프로퍼티와 메서드를 상속받는 것이 가능하다. var obj2 = { prop1: "this", // 프로퍼티 prop2: "is", // 프로퍼티 prop3: "property", // 프로퍼티 hello: function () { // 행동을 정의하는 메서드 console.log("메서드"); } } obj2.hello(); >> 메서드 객체 ..

[JavaScript] JavaScript 기초 / (변수선언, 입출력, 적용법)

[ JavaScript ] JavaScript란? 객체(Object) 기반의 프로그래밍 언어이다. HTML로는 웹의 내용을 작성하고, CSS로는 웹을 디자인하며, 자바스크립트로는 웹의 동작을 구현할 수 있다. (HTML은 웹의 '뼈대', CSS는 뼈대의 '디자인', 자바스크립트는 '뇌' 라고 생각하자) Node.js와 같은 프레임워크를 사용하면 서버영역에서도 사용할 수 있다. 자바스크립트는 1995년에 넷스케이프(Netscape)의 브렌던 아이크(Brendan Eich)에 의해 만들어졌다. 처음에는 모카(Mocha)라는 이름으로 개발되었으나, 그 후에 라이브스크립트(LiveScript), 최종적으로는 자바스크립트(JavaScript)라는 이름으로 변경됐다. 1996년에 넷스케이프(Netscape)는 자바..

[JavaScript] 자바스크립트의 this

Tech/JavaScript & TypeScript 2023. 1. 13. 22:16
728x90

this


자바의 this와는 다르게 클래스에 종속되지 않으며 자바스크립트에서의 this는 함수의 호출방식에 따라 가져오는 객체가 달라지므로 this의 사용 위치가 중요하다.

기본적으로는 최상위객체인 window를 가리킨다.

console.log(this);                      // window
function test1(){
    console.log("test1 ", this);        // test1 window
    function test2(){
        console.log("test2 ", this);    // test2 window
    }
    test2();
}
test1();

 

 

 

 

함수 안에서의 this

함수 안에서의 this는 함수의 주인에게 바인딩된다.

아래의 예시에서 this.num의 this는 window객체를 가리킨다.

var num = 0;
function addNum() {
  this.num = 100;
  num++;
  
  console.log(num);                // 101
  console.log(window.num);         // 101
  console.log(num === window.num); // true
}
 
addNum();

 

 

 

메서드 안에서의 this

메서드 내부 코드에서 사용된 this는 해당 메서드를 호출한 객체로 바인딩된다.

var person = {
  firstName: 'Hong',
  lastName: 'gildong',
  fullName: function () {
    return this.firstName + ' ' + this.lastName;
  },
};
 
person.fullName(); // "Hong gildong"
var num = 0;
 
function showNum() {
  console.log(this.num);
}
 
showNum(); // 0
 
var obj = {
  num: 7,
  func: showNum,
};
 
obj.func(); // 7

 

 

 

이벤트 핸들러 안에서의 this

이벤트를 받는 html요소를 가리킨다.

const btn = document.querySelector('#btn')
btn.addEventListener('click', function () {
  console.log(this); //#btn
});

 

 

 

생성자 안에서의  this

생성자 함수가 생성하는 객체로 바인딩된다.

function Person(name) {
  this.name = name;
}
 
var kim = new Person('kim');
var lee = new Person('lee');
 
console.log(kim.name); //kim
console.log(lee.name); //lee

 

 

 

화살표 함수(Arrow function)에서의  this

함수 안에서 this가 전역 객체가 되는 경우, 화살표 함수로 사용하면 된다.

화살표 함수는 this를 새로 정의하지 않고, 바로 바깥 함수나 클래스의 this를 사용한다.

var Person = function (name, age) {
  this.name = name;
  this.age = age;
  this.say = function () {
    console.log(this); // Person {name: "Nana", age: 28}
 
    setTimeout(function () {
      console.log(this); // Window
      console.log(this.name + ' is ' + this.age + ' years old');
    }, 100);
  };
};
var me = new Person('Nana', 28);
 
me.say(); //global is undefined years old
var Person = function (name, age) {
  this.name = name;
  this.age = age;
  this.say = function () {
    console.log(this); // Person {name: "Nana", age: 28}
 
    setTimeout(() => {
      console.log(this); // Person {name: "Nana", age: 28}
      console.log(this.name + ' is ' + this.age + ' years old'); 
    }, 100);
  };
};
var me = new Person('Nana', 28); //Nana is 28 years old

 

 

 

 

참조 ( 정말 많은부분 배웠습니다 감사합니다 )

https://nykim.work/71

300x250
mag1c

mag1c

2년차 주니어 개발자.

[JavaScript] 타이머 함수 (setTimeout, setInterval, clearTimeout, clearInterval)

Tech/JavaScript & TypeScript 2023. 1. 13. 21:38
728x90

타이머


Window 객체의 메서드 중 하나이며 익명, 기명함수를 통해 값을 제어한다.

일정시간이 지난 뒤 함수를 호출하거나, 특정 함수를 지속적으로 반복하여 실행할 때 사용한다.

ms단위를 사용한다.

 

setTimeout / clearTimeout

지정한 시간 이후, 단 한번만 지정된 콜백함수 호출

clearTimeout을 통해 setTimeout 호출 취소

See the Pen Untitled by magic (@mag11c) on CodePen.

 

 

 

setInterval / clearInterval

지정된 시간 간격마다 지정된 함수를 반복적으로 호출 및 호출취소

See the Pen Untitled by magic (@mag11c) on CodePen.

300x250
mag1c

mag1c

2년차 주니어 개발자.

[JavaScript] 이벤트(Event)

Tech/JavaScript & TypeScript 2023. 1. 13. 13:21
728x90

목차


    이벤트(Event)


    사용자가 버튼을 눌렸을 때, 웹 페이지가 로드될 때, 특정 영역에 마우스가 올라갔을 때 등등등. 이벤트의 요소는 다양하다.

    이 이벤트들은 DOM요소와 관련이 깊다.

    ​이벤트가 발생하면 무언가가 이를 감지할 수 있어야 하며, 그에 대응하는 반응을 하여야 한다.

    이를 위해 이벤트는 일반적으로 함수에 연결되며 그 함수는 이벤트가 발생하기 전에는 실행되지 않다가 이벤트가 발생되면 실행된다.

    ​이 함수를 이벤트 핸들러라 하며 이벤트에 대응하는 처리를 기술한다.

    이벤트리스너와 이벤트핸들러
    이벤트 핸들러는 addEventListener() 메서드를 사용하지 않고 이벤트와 함수를 연결하는 것이다.

     

    이벤트 종류


    UI Event

    Event 설명
    load 웹, 스크립트 페이지 로드 완료시
    unload 새로운 페이지 요청 등 웹페이지의 unload상태일 때
    error 브라우저가 JS오류를 만났거나 요청값이 없을 때
    resize 브라우저 창의 크기를 조절했을 때
    scroll 사용자가 페이지를 위 아래로 스크롤할 때
    select 텍스트 선택 시

     

    Keyboard Event

    Event 설명
    keydown 키를 누르고 있을 때
    keyup 누르고 있던 키를 뗄 때
    keypress 키를 눌럿다 뗄 때
    keycode 키의 코드값 (https://blog.lael.be/post/75)

     

    Mouse Event

    Event 설명
    click 마우스 클릭 시
    dbclick 더블클릭 시
    mousedown 마우스 버튼을 누르고 있을 때
    mouseup 누르고 있던 마우스 버튼을 뗄 때
    mousemove 마우스를 움직일 때(터치스크린 미작동)
    mouseover 마우스를 요소 위로 움직였을 때(터치스크린 미작동)
    mouseout 마우스를 요소 밖으로 움직였을 때(터치스크린 미작동)
    mouserenter 마우스 커서를 올려놓을 때
    mouseleave 마우스 커서를 빼낼 때

     

    Focus Event

    Event 설명
    focus
    focusin
    요소가 포커스를 얻었을 때
    blur
    focusout
    요소가 포커스를 잃었을 때

     

    Form Event

    Event 설명
    input input 또는 textarea 요소의 값이 변경되었을 때
    contenteditable 어트리뷰트를 가진 요소의 값이 변경되었을 때
    change select box, checkbox, radio button의 상태가 변경되었을 때
    submit form을 submit할 때
    reset reset 버튼을 클릭할 때 (최근에는 사용하지 않음)

     

    Clipboard Event

    Event 설명
    cut 컨텐츠 잘라내기
    copy 컨텐츠 복사
    paste 컨텐츠 붙여넣기

     

    더 많은 이벤트들은 아래 페이지를 참고하자.

    https://developer.mozilla.org/ko/docs/Web/Events

     

    이벤트 참조 | MDN

    DOM 이벤트는 발생한 흥미로운 것을 코드에 알리기 위해 전달됩니다. 각 이벤트는 Event 인터페이스를 기반으로한 객체에 의해 표현되며 발생한 것에 대한 부가적인 정보를 얻는데 사용되는 추가

    developer.mozilla.org


     

     

    이벤트 등록


    inline 방식

    // 이벤트가 발생한 대상을 필요로 하는 경우 this를 통해 참조 가능
    <input type="button" onclick="alert('Hello world, ' + this.value);" value="button" />
    // script 탭에 함수를 만들고 태그에 지정하는 방식
    <button onclick="myHandler1(); myHandler2();">Click me</button>
    <script>
        function myHandler1() {
          alert('myHandler1');
        }
        function myHandler2() {
          alert('myHandler2');
        }
    </script>

     

    객체나 요소에 프로퍼티로 등록하는 방법

    자바스크립트 코드에서 프로퍼티로 등록하거나, HTML 태그에 속성으로 등록할 수 있다.

    각 방법들은 오직 하나의 이벤트 핸들러만 등록가능하거나, 가독성 및 유지보수성 저하라는 단점이 있다.

    // JS코드에서 프로퍼티 등록 - 오직 하나의 이벤트만 등록이 가능.
    window.onload = function() {                    // HTML 문서가 로드될 때 실행
        var text = document.getElementById("text");
        text.innerHTML = "HTML 문서가 로드되었음";
    }
    
    // HTML 태그에 속성으로 등록 - 가독성 및 유지보수성 저하
    <p onclick="alert('문자열을 클릭했어요!')">ㅎㅇ</p>

     

    addEventListener() 메서드 활용

    addEventListener 메소드를 이용하여 대상 DOM 요소에 이벤트를 등록한다.

    해당 이벤트가 발생했을 때 실행될 콜백 함수(이벤트 핸들러)를 지정한다.

     

     

    addEventListener 함수 방식은 이전 방식에 비해 아래와 같이 보다 나은 장점을 갖는다.

    • 하나의 이벤트에 대해 하나 이상의 이벤트 핸들러를 추가할 수 있다.
    • 캡처링과 버블링을 지원한다.
    • 모든 DOM 요소(HTML, XML, SVG)에 대해 동작한다. 브라우저는 웹 문서(HTML, XML, SVG)를 로드한 후, 파싱하여 DOM을 생성한다.
    var btn = document.getElementById("btn");
    btn.addEventListener("click", clickBtn);
    btn.addEventListener("mouseover", mouseoverBtn);
    btn.addEventListener("mouseout", mouseoutBtn); 
    
    function clickBtn() {
        document.getElementById("text").innerHTML = "클릭"
    }
    
    function mouseoverBtn() {
        document.getElementById("text").innerHTML = "마우스오버";
    }
    
    function mouseoutBtn() {
        document.getElementById("text").innerHTML = "마우스아웃";
    }
    
    // 삭제
    function clickBtn() {
        btn.removeEventListener("mouseover", mouseoverBtn);
        btn.removeEventListener("mouseout", mouseoutBtn);
        document.getElementById("text").innerHTML = "삭제 완료";
    }

     

     

    이벤트 핸들러 내부의 this


    인라인 방식

    전역 객체인 window를 가리킨다.

    <button onclick="hello()">클릭</button>
     
    <script>
        function hello () {
          console.log(this);    // window
        }
    </script>

     

    프로퍼티 방식과 addEventListener방식

    이벤트(이벤트 리스너)에 바인딩된 요소를 가리킨다

    <button class="btn">버튼</button>
     
    <script>
        const btn = document.querySelector('.btn');
     
        btn.onclick = function (e) {
          console.log(this);                     // <button class="btn">Button</button>
          console.log(e.currentTarget);          // <button class="btn">Button</button>
          console.log(this === e.currentTarget); // true
        };
    </script>
    <button class="btn">Button</button>
     
    <script>
        const btn = document.querySelector('.btn');
     
        btn.addEventListener('click', function (e) {
          console.log(this);                     // <button class="btn">Button</button>
          console.log(e.currentTarget);          // <button class="btn">Button</button>
          console.log(this === e.currentTarget); // true
        });
    </script>

     


     

     

    이벤트 객체


    이벤트를 발생시킨 요소와 발생한 이벤트에 대해 유용한 정보를 제공한다.

    이벤트가 발생하면 이벤트객체는 동적으로 생성되며 이벤트 처리를 위해 이벤트 핸들러에 파라미터로 전달한다.

    this와 이벤트 객체
    this는 바인딩 된 DOM요소 자체를 가리키며, 이벤트 객체는 해당 이벤트가 발생한 객체를 가리킨다.
    <p>클릭한 곳 좌표</p>
    <h2 class="msg"></h2>
    <script>
        function showJwapyo(e){
            const msg = document.querySelector('.msg');
            msg.innerHTML = 'x축 : ' + e.clientX + '<br>' + 'y축 : ' + e.clientY;
        }
    
        addEventListener('click', showJwapyo);
    
        const msg = document.querySelector('.msg')
        addEventListener('click', function(e){
            showJwapyo(e, msg);
        })
    </script>

    이벤트 객체를 활용하여 클릭 시 좌표 값 출력

     

     

    <button id="btn1">버튼1</button>
    <button id="btn2">버튼2</button>
    <button id="btn3">버튼3</button>
    
    <script>
    	function hide(e){
            if(e.target.id=='btn3'){
                btn1.style.visibility='';
                btn2.style.visibility='';
            }
            if(e.target.id=='btn1' || e.target.id=='btn2')
            e.target.style.visibility = 'hidden';
        }
    
        const btn1 = document.getElementById('btn1');
        const btn2 = document.getElementById('btn2');
        const btn3 = document.getElementById('btn3');
        btn1.addEventListener('click',hide);
        btn2.addEventListener('click',hide);
        btn3.addEventListener('click',hide);
    </script>

    활용 2

     

     

    이벤트객체는 이벤트 핸들러에 암묵적으로 전달되지만, 이벤트 핸들러를 선언할 때, 전달받을 첫 번째 매개변수를 명시적으로 선언하여야 한다. 위에서 사용한 매개변수 e는 다른 이름으로 사용해도 된다.

     

     

    이벤트 객체 Property

    Property 설명
    Event.target 이벤트를 발생시킨 요소를 가리킨다.
    버블링에 의해 다른 타겟이 인식 될 수도 있다.
    Event.currentTarget 이벤트에 바인딩 된 요소를 가리킨다(=this)
    Event.type 이벤트의 종류를 나타내는 문자열을 반환한다
    Event.cancelable 요소의 기본 동작을 취소시킬 수 있는지 여부를 Boolean값으로 반환한다
    Event.eventPhase 이벤트 흐름 상에서 어느 단계에 있는지를 반환한다
    0 = 이벤트 없음 / 1 = 캡쳐링 / 2 = 타깃 / 3 = 버블링

     

     

    이벤트 위임


    다수의 자식 요소에 각각 이벤트 핸들러를 바인딩하는 대신 하나의 부모요소에 이벤트 핸들러를 바인딩하는 방법이다.

    새로운 li요소를 추가하더라도 이벤트 처리는 부모요소인 ul에 위임되어있기 때문에 새로운 요소에 이벤트 핸들러를 다시 바인딩 할 필요가 없다.

    <ul>
        <li>item 1</li>
        <li>item 2</li>
        <li>item 3</li>
        <li>item 4</li>
        <li>item 5</li>
    </ul>
    <script>
        const ul = document.querySelector('ul')
        const h1 = document.querySelector('h1')
        var num = 0;
        ul.addEventListener('click', function(e){
            e.target.classList.toggle('clicked');
            h1.textContent = e.target.textContent + '이(가) 클릭됨'
        })
    </script>


     

     

     

    이벤트 중단


    event.preventDefault();

    현재 이벤트의 동작을 중단한다.

     

    event.stopPropagation();

    현재 이벤트의 버블링을 중단한다.

     

    event.stopImmediatePropagation();

    현재 이벤트의 버블링을 중단하며, 같은 레벨에 있는 이벤트도 중단한다.


     

     

     

    참조

    http://www.tcpschool.com/javascript/js_event_eventListenerCall

    https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%F0%9F%92%AF-%EC%B4%9D-%EC%A0%95%EB%A6%AC#%EC%9D%B4%EB%B2%A4%ED%8A%B8_%ED%95%B8%EB%93%A4%EB%9F%AC_%EB%82%B4%EB%B6%80%EC%9D%98_this_%EC%9D%B4%EC%9A%A9

    300x250
    mag1c

    mag1c

    2년차 주니어 개발자.

    [JavaScript] 객체(Object)

    Tech/JavaScript & TypeScript 2023. 1. 12. 23:06
    728x90

    객체(Object)


    생성자를 통해 객체를 만들 수 있으며, 객체를 직관적으로 선언하여 사용할 수 있다.

    Key, Value로 구성된 속성(프로퍼티)들의 집합이다.

    자바스크립트의 함수를 프로퍼티에 사용할 수 있으며, 객체 내부에 선언된 함수를 메서드라 한다.

    자바스크립트의 객체는 프로퍼티와 그 객체에 관련된 동작(메서드)를 모두 포함할 수 있다.

    프로토타입 객체의 프로퍼티와 메서드를 상속받는 것이 가능하다.

    var obj2 = {
    	prop1: "this",        // 프로퍼티
    	prop2: "is",          // 프로퍼티
    	prop3: "property",    // 프로퍼티
    	hello: function () {  // 행동을 정의하는 메서드
        	console.log("메서드");
    	}
    }
    obj2.hello();
    >> 메서드

     

     

     

     

    객체 생성


    리터럴 표기

    var obj2 = {
        prop1: "this"
        prop2: "is",
        prop3: "property",
        hello: function () {
          console.log("메서드");
        }
    }

     

     

    Object를 이용

     

    해당 객체에 프로퍼티가 존재하지 않아도 바로 추가할 수 있다.

    let cat = new Object();
        cat.hungryYn = 'Y';
        cat.howl = function(){
            console.log("배고파");
        }
        console.log(cat.hungryYn); // Y
        beomsu.howl();             // 배고파
    }

     

     

    생성자 이용

    function 키워드를 이용해 선언하는 객체 타입이며 일반 생성자 함수의 경우 파라미터(프로퍼티)를 미리 지정

    생성자 함수 내 선언된 일반 변수들은 외부참조 불가능 ( = 자바 메서드 내에 선언된 변수)

    function cat(name, type) {
            this.name = name;
            this.type = type;
            this.act = function(){
                console.log(name+"가 열심히 밥을 먹고있음");
            }
        }
        let dog = new cat("구찌", "포메");
        let kitty = new cat("키티", "러시안블루");
        
        console.log(dog.name);    // 구찌
        console.log(kitty.type);  // 러시안블루
        dog.act();                // 구찌가 열심히 밥을 먹고있음
    }

     

     

     

     

    프로토타입


    자바스크립트는 프로토타입 기반(prototype-based)의 객체 지향 언어이다.

    프로토타입 기반의 객체 지향 언어이기 때문에 상속의 개념이 클래스 기반의 객체 지향 언어와는 다른점이 있다.

    자바스크립트에서는 현재 존재하고 있는 객체를 프로토타입으로 사용하여, 해당 객체를 복제하여 재사용하는 것을 상속이라고 한다.

     

    자바스크립트의 모든 객체는 프로토타입(prototype)이라는 객체를 가지고 있다.

    모든 객체는 그들의 프로토타입으로부터 프로퍼티와 메소드를 상속받는다.

    자바스크립트의 모든 객체는 최소한 하나 이상의 다른 객체로부터 상속을 받으며, 이때 상속되는 정보를 제공하는 객체를 프로토타입(prototype)이라고 한다.

    var obj = new Object(); // Object.prototype
    var arr = new Array();  // Array.prototype
    var date = new Date();  // Date.prototype

     

    Object.prototype 객체는 어떠한 프로토타입도 가지지 않으며, 아무런 프로퍼티도 상속받지 않는다.

    자바스크립트에 내장된 모든 생성자나 사용자 정의 생성자는 Object.prototype을 가진다.

    var date = new Date(); // Date.prototype과 Object.prototype을 가진다

     

     

    프로토타입 생성

    function Dog(color, name, age) {
        this.color = color;       
        this.name = name;           
        this.age = age;            
    }
    var myDog = new Dog("흰색", "구찌", 5); // 이 객체는 Dog라는 프로토타입을 가짐.

     

    MyDog 객체에 프로퍼티 및 메서드 추가

    새롭게 추가된 family프로퍼티와 breed() 메소드는 오직 myDog 인스턴스에만 추가됐다.

    이미 생성된 다른 Dog 객체나 차후에 생성되는 어떠한 다른 Dog 객체에도 추가되지 않는다.

    (...생략...)
    myDog.family = "포메라니안";       // 품종에 관한 프로퍼티 추가
    myDog.breed = function() {        // 털색을 포함한 품종을 반환해 주는 메서드 추가
        return this.color + " " + this.family;
    }
    document.write("우리 집 강아지는 " + myDog.breed() + "입니다.");

     

    프로토타입에 프로퍼티 및 메소드 추가

    생성자 함수에 직접 추가해야만 이후에 생성되는 모든 다른 객체에도 적용할 수 있다.

    // 현재 존재하고 있는 Dog 프로토타입에 family 프로퍼티를 추가함.
    Dog.prototype.family = "시베리안 허스키";
    // 현재 존재하고 있는 Dog 프로토타입에 breed 메소드를 추가함.
    Dog.prototype.breed = function() {
        return this.color + " " + this.family;
    };
    
    var myDog = new Dog("흰색", "구찌", 5);
    var hisDog = new Dog("갈색", "콩이", 3);
     
    document.write("우리집 강아지의 품종은 " + myDog.breed() + "이다.");
    document.write("친구집 강아지의 품종은 " + hisDog.breed() +  이다.");
    document.write("우리집 강아지는 " + myDog.family + "이고, 친구집 강아지도 " + hisDog.family + "이다.");

     

    프로퍼티 삭제

    // delete 객체이름.프로퍼티이름
    delete myDog.age // age 프로퍼티 삭제
    직접 생성한 프로토타입은 위와 같이 새로운 프로퍼티나 메소드를 마음껏 추가하거나 삭제할 수 있다.
    물론 자바스크립트 표준 객체의 프로토타입도 임의로 수정할 수 있으나, 심각한 오류가 발생할 가능성이 있다.
    따라서 자바스크립트 표준 객체의 프로토타입은 수정해서는 안된다.

     

     

     

     

     

    객체 프로퍼티 루프(순회)


    프로퍼티 루프 수행방법

    • for-in :객체의 모든 열거할 수 있는 프로퍼티 루핑
    • Object.keys() : 해당 객체가 가진 고유 프로퍼티 중에서 열거할 수 있는 프로퍼티 이름을 배열에 담아 반환
    • Object.getOwnPropertNames() : 해당 객체가 가진 고유 프로퍼티 이름을 배열에 담아 반환
     var obj2 = {
        prop1: "this",
        prop2: "is",
        prop3: "property",
        hello: function () {
            console.log("메서드");
        }
    
        for(var i in obj2){
       	 console.log(i + ":" + obj2[i]);
        }
    }
    
    >> prop1:this
    >> prop2:is
    >> prop3:property
    >> hello:function() {
    	 console.log("메서드");
       }
    function Dog(color, name, age) {
        this.color = color;
        this.name = name;
        this.age = age;
    }
    
    // color 프로퍼티의 enumerable 속성을 false로 설정함.
    Object.defineProperty(myDog, 'color', {enumerable : false} );
     
    // 객체가 가진 고유 프로퍼티 중에서 열거할 수 있는 프로퍼티 이름을 배열에 담아 반환함.
    document.write(Object.keys(myDog) + "<br>");       // [name, age]
     
    // 객체가 가진 모든 고유 프로퍼티의 이름을 배열에 담아 반환함.
    document.write(Object.getOwnPropertyNames(myDog)); // [color, name, age]

     

     

     

    참조

    http://www.tcpschool.com/javascript/js_object_concept

    300x250
    mag1c

    mag1c

    2년차 주니어 개발자.

    [JavaScript] JavaScript 기초 / (변수선언, 입출력, 적용법)

    Tech/JavaScript & TypeScript 2023. 1. 11. 12:43
    728x90

    [  JavaScript  ]


    JavaScript란?

    객체(Object) 기반의 프로그래밍 언어이다.

    HTML로는 웹의 내용을 작성하고, CSS로는 웹을 디자인하며, 자바스크립트로는 웹의 동작을 구현할 수 있다.

    (HTML은 웹의 '뼈대', CSS는 뼈대의 '디자인', 자바스크립트는 '뇌' 라고 생각하자)

    Node.js와 같은 프레임워크를 사용하면 서버영역에서도 사용할 수 있다.

     

    자바스크립트는 1995년에 넷스케이프(Netscape)의 브렌던 아이크(Brendan Eich)에 의해 만들어졌다.

    처음에는 모카(Mocha)라는 이름으로 개발되었으나, 그 후에 라이브스크립트(LiveScript), 최종적으로는 자바스크립트(JavaScript)라는 이름으로 변경됐다.

    1996년에 넷스케이프(Netscape)는 자바스크립트를 국제 표준안으로 만들기 위해 ECMA(European Computer Manufacturers Association)에 제출했다. 그 결과 ECMAScript라는 새로운 표준을 제정하였고, 국제 표준이 된다.

    첫 번째 버전인 ECMA-262를 1997년에 공표했다. 

    현재 자바스크립트의 최신 표준은 2015년에 발표된 ECMAScript 6이다.

     

    JavaScript의 특징

    1. 객체 기반의 스크립트 언어이다.

    2. 동적이며, 타입을 명시할 필요가 없는 인터프리터 언어이다.

    3. 프로토타입 기반의 객체 지향 언어지만, 멀티패러다임의 프로그래밍 언어이다.(함수지향 프로그래밍과 객체지향 프로그래밍을 모두 지원하는 언어이다.)

    4. 현 시점에서 브라우저에 동작하는 유일한 프로그래밍 언어이다.

     

    vs Java

    Java Java Script
    컴파일 언어 인터프리터 언어
    타입 검사가 엄격하다 타입 명시를 하지 않음
    클래스 기반의 객체지향 언어 프로토타입 기반의 객체지향 언어

     

    변수 선언

    변수 선언 시 타입을 명시하지 않는다.

    var String test = "123"; (x)
    var test = "123";

    선언 방식

    변수 설명
    var 변수 선언 시 재선언, 재할당 가능
    let 재할당만 가능
    const 상수 / 모두 불가능

    1. var

    재선언 및 재할당이 가능하다.

    var a = "100";
    console.log(a); // 100
    var a = "200";
    console.log(a); // 200
    var a = "300";
    console.log(a); // 300

    2. let

    재할당만 가능하다.

    // 불가능하다
    let a = "100";
    console.log(a);
    let a = "200";
    console.log(a);
    
    let a = "100";
    console.log(a); // 100
    a = "200";
    console.log(a); // 200

    3. const

    재선언 및 재할당이 불가능하다. (상수)

    const는 처음 선언할 때 반드시 초기화(할당)를 해주어야 한다.

    const c = 100;
    c = 200;  // TypeError: Assignment to constant variable

     

    입·출력

     입력

    prompt를 사용한다

    prompt("입력하세요");

     

     출력

    1. window.alert() 메서드

    2. HTML DOM 요소를 이용한 innerHTML 프로퍼티(속성)

    3. document.write() 메서드

    4. console.log() 메서드

     

    window.alert()

    let x=20, y=30;
    if(x==y) alert("같다");
    else if(x>y) alert("왼쪽이 크다");
    else alert("오른쪽이 크다");

     

    innerHTML

    HTML DOM 요소를 이용한 방법이다.

    document 객체의 getElementByID()나 getElementsByClassName() 등의 메서드를 사용하여 HTML요소를 선택 후

    innerHTML 프로퍼티(속성)를 이용하면 선택된 HTML 요소의 내용이나 속성값 등을 변경할 수 있다.

    <script>
        var str = document.getElementById("text");
        str.innerHTML = "바꼈다ㅋㅋ";
    </script>

    DOM 요소를 배운 뒤 더 자세하게 설명해보겠다.

     

     

    document.write()

    웹 페이지가 로딩될 때 실행되면, 가장 먼저 데이터를 출력한다.

    웹 페이지의 모든 내용이 로딩된 후에 해당 메서드가 실행되면, 웹 페이지 내에 로딩된 모든 데이터를 지우고 자신의 데이터를 출력한다.

    테스트나 디버깅 외의 용도로 사용할 경우 데이터가 손실되지 않게 주의하여 사용해야 한다.

    <button onclick="document.write(77 * 77)">버튼</button>

     

     

    console.log()

    웹 브라우저의 콘솔을 통해 데이터를 출력해준다.

    웹 브라우저에서 F12를 누른 후, 콘솔을 클릭하면 콘솔 화면을 사용할 수 있다.

    콘솔 화면을 통한 데이터의 출력은 디버깅하는데에 많은 도움이 된다.

    for(var i=0; i<=3; i++){
        for(var j=0; j<=3; j++){
            console.log("숫자1 : "+i+" 숫자2 : "+j);
        }
    }

     

    JS 적용방법

    내부 적용

    script 태그를 이용한다.

    <head>
        <meta charset="UTF-8">
        <title>JavaScript Apply</title>
        <script>
            function printDate() {
                document.getElementById("date").innerHTML = Date();
            }
        </script>
    </head>

     

    외부 적용

    외부 js파일과 html을 연결한다.

    <head>
        <meta charset="UTF-8">
        <title>JavaScript</title>
        <script src="/test/test.js"></script>
    </head>
     
    300x250
    mag1c

    mag1c

    2년차 주니어 개발자.

    방명록