공부하자/Vue.js

#1. Vue 인스턴스 생성, 생성자 함수, 즉시실행 함수

snbrin 2023. 9. 21. 11:23

Inflearn [ Vue.js 시작하기 - Age of Vue.js ]  강의 기록입니다.

 

 

What is Vue?

MVVM 패턴의 뷰모델 레이어에 해당하는 화면(view)단 라이브러리.

view는 html영역이고 DOM으로 관리함

view에서 사용자가 발생시킨(키보드, 마우스 등) 이벤트를 중간에서 DOM Listener가 이벤트를 청취(?)함 -> js의 데이터를 변경시키거나 js의 로직에서 이벤트를 실행시킴 -> js에서 변경된 데이터를 Data Bindings를 이용해서 다시 view화면에 반영하게 됨.

 

vue의 특징 중 하나. Reactivity(반응성) - javaScript의 상태 변화에 따라 자동으로 결과값을 추적, 변환하여 보여줄 수 있다.

 

Vue 인스턴스

뷰 개발에 필수 생성 단위

인스턴스 생성 -> var vm = new Vue({  내용  })

생성 하고 나면 변수 안에 값을 담을 수 있다.

인스턴스 안에 사용 가능한 key값은 정해져 있다.(el, data, methods, created 등)

<body>
    <div id="app"></div>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        
        // vue 인스턴스 생성 : vue 사용에 필수적인 인스턴스 생성
        var vm = new Vue({
            el : '#app',     //el은 elemnet의 약자 -> body태그 안에서 app이라는 id를 가진 태그를 찾아서 인스턴스를 붙여서 해당 태그 안에서 vue의 기능과 속성을 쓰겠다.
            data : {
                message : 'hi'
            },
            methods : {

            },
            created : function(){
                
            }
        });
        
    </script>

</body>

 

 

Vue 생성자함수

기본적인 생성자 함수 형태

 

Vue 생성자함수 예시

미리 Vue 생성자 함수를 정의해두면, new Vue()로 인스턴스를 어떤 객체(var vm)에 생성할 때마다 객체(vm)안에는 미리 정의한 생성자 함수들을 코드에서 바로 사용할 수 있ek.

매번 함수를 정의 하는 것이 아닌 그냥 가져다 쓰면 되는 것. 

 

즉시실행함수

 <script>

    var div = document.querySelector('#app');
    var viewModel = {}; //객체 선언

    // 즉시실행함수 - 로직이 직접적으로 노출되지 않도록 함
    (function(){
        // 라이브러리화 하려면? 함수형으로 만들기 
        function init(){
            // Object.defineProperty : 객체의 동작을 재정의하는 api | Object.defineProperty(대상객체, 객체의 속성, { 정의할 내용 })
            Object.defineProperty(viewModel, 'str', {
            // 속성에 접근했을 때의 동작 정의 : get
            get : function(){           // viewModel.str에 접근
                console.log('접근');
            },
            // 속성에 값을 할당했을 때의 동작 정의 : set
            set : function(newValue){           // viewModel.str에 값 할당
                console.log('할당',newValue);
                //div.innerHTML = newValue;   // 값을 바꿀 때마다 화면 데이터가 변화 => reactivity의 핵심!
                render(newValue);
            }
        });
        }

        function render(value){
            div.innerHTML = value;
        }

        init();

    })();

</script>

 

 

[ 참고 ] 

https://vuejs.org/guide/introduction.html#what-is-vue

 

Introduction | Vue.js

 

vuejs.org

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Function

 

Function - JavaScript | MDN

Function 생성자는 새 Function 객체를 만듭니다. 이 생성자를 직접 호출하여 동적으로 함수를 생성할 수도 있으나, 보안 문제 및 eval (en-US)과 유사한(그러나 훨씬 덜 심각한) 성능 문제가 발생할 수

developer.mozilla.org

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor

 

Object.prototype.constructor - JavaScript | MDN

인스턴스의 프로토타입을 만든 Object 함수의 참조를 반환합니다. 이 속성값은 함수 자체의 참조임을 주의하세요, 함수 이름을 포함하는 문자열이 아니라. 그 값은 1, true 및 "test"와 같은 원시(primi

developer.mozilla.org