ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바스크립트 기본 - Object
    JavaScript/생활코딩 2018. 12. 12. 10:46



    Object - https://opentutorials.org/course/743/6578



    Object 객체는 객체의 가장 기본적인 형태를 가지고 있는 객체이다. 

    다시 말해서 아무것도 상속받지 않는 순수한 객체다. 

    자바스크립트에서는 값을 저장하는 기본적인 단위로 Object를 사용한다. 


    Object 객체가 가지고 있는 prototype은 모든 객체가 공통적으로 사용할 수 있다.




    Object의 확장을 통한 예제이다.


    Object.prototype.contain = function(neddle) { //contain은 사용자가 지정한 함수이다.

        for(var name in this){ //this는 메소드가 소속되어있는 객체를 의미한다. contain에서 소속되어있는 객체는 o이므로 o를가리키거나, contain에서 소속되어있는 객체는 a이므로 a를 가리킨다.

            if(this[name] === neddle){

                return true;

            }

        }

        return false;

    }


    var o = {'name':'egoing', 'city':'seoul'}

    console.log(o.contain('egoing')); //인자에 해당되는 값('egoing')이 객체(o)에 있다면 true, 없다면 false이다.

    var a = ['egoing','leezche','grapittie'];

    console.log(a.contain('leezche')); //인자에 해당되는 값('leezche')이 객체(a)에 있다면 true, 없다면 false이다.






    Object의 확장은 모든 객체에게 영향을 주기 때문에 위험하다.

    아래는 Object확장의 위험을 보여준다.

    위의 예제에서 이어지는 내용인데, 해당 for문을 동작하면 o객체안에 있는 name값만을 얻기위한 동작이지만 contain이라는 값이 포함되어 있다. 

    모든 객체에 영향을 주기 때문에 객체 안에 있는 내용도 변경된 것이다.



    for(var name in o){

        console.log(name);  

    }


    [결과화면]

    name

    contain






    결과화면에서 contain을 제외하고 원래의 목적대로 값을 구할 수 있는 방법은 있다.

    방법은 아래와 같다.


    for(var name in o){

        if(o.hasOwnProperty(name))  //hasOwnProperty는 인자로 전달된 속성의 이름이 객체(o)의 속성인지 여부를 판단한다. 만약 prototype으로 상속 받은 객체라면 false가 된다. 

            console.log(name);  

    }





    댓글

Designed by Tistory.