ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [객체] - 객체 프로퍼티와 메소드
    JavaScript/기본 1 2022. 2. 5. 17:35
    • 객체 프로퍼티(property)
      • 모든 자바스크립트 객체는 Object객체와 Object.prototype객체의 모든 프로퍼티를 상속받는다.
    • 객체 메소드 (method)
      1. hasOwnProperty( )
        • 특정 프로퍼티가 해당 객체에 존재하는지 검사
        • 직접  선언된 프로퍼티만 검사
        • 같은 이름의 프로퍼티라도 상속받은 프로퍼티는 false반환
          • function Dog(color, name, age, family) {
                this.color = color;
                this.name = name;
                this.age = age;
                this.family = family;
                this.breed = function() {
                    return this.color + " " + this.family;
                }
            }
            
            var myDog = new Dog("검정색", "곰", 3, "불독");
            myDog.hasOwnProperty("color");  // ture
            myDog.hasOwnProperty("breed");  // true
            myDog.hasOwnProperty("class");  // false => 상속받은 프로퍼티
      2. propertyIsEnumerable( )
        • 특정 프로퍼티가 해당 객체에 존재하고, 열거할 수 있는 프로퍼티인지 검사
        • hasOwnProperty( )메소드가 true이면서, 동시에 열거할 수 있는지 검사
          • function Dog(color, name, age) {
                this.color = color;
                this.name = name;
                this.age = age;
            }
            
            var myDog = new Dog("흰색", "마루", 1);
            
            // color프로퍼티의 enumerable 속성을 false로 설정
            Object.defineProperty(myDog, 'color', { enumerable: flase });  // enumerable: 열거가능한
            
            document.write(myDog.propertyIsEnumerable("color") + "<br>");  // false
            document.write(myDog.propertyIsEnumerable("name") + "<br>");  // true
            document.write(myDog.propertyIsEnumerable("age")); // true
      3. isPrototypeOf( )
        • 특정 객체의 프로토타입 체인에 현재 객체가 존재하는지 검사
          • var day = new Date(); // Date 객체를 생성함
            
            // 객체 day의 프로토타입이 Date.prototype인지를 검사함
            document.write(Date.prototype.isPrototypeOf(day));  // true
            document.write(Date.prototype.isPrototypeOf(new String()));  // false
      4. isExtensible( )
        • 객체에 새로운 프로퍼티 추가할 수 있는지 여부 반환
        • preventExtensions( )메소드 사용으로 해당 객체에 새로운 프로퍼티를 추가할 수 없도록 설정할 수 있다.
          • var day = new Date();  // Date 객체 생성
            
            // 객체 day에 새로운 프로퍼티를 추가할 수 있는지 검사
            document.write(Object.isExtensible(day) + "<br>");  // true
            
            // 해당 객체에 새로운 프로퍼티를 추가할 수 없도록 설정함
            var myDay = Object.preventExtensions(day);
            
            document.write(Object.isExtensible(day));  // false
      5. toString( )
        • 호출한 객체의 값을 문자열로 반환한다.
        • 어떠한 인수도 전달받지 않는다. 
          • var arr = [10, "문자열", true];  // 배열
            var bool = false;  // 불리언
            function func() { return 0; } // 함수
            
            arr.toString();  // 10, 문자열, true
            bool.toString();  // false
            func.toString();  // 함수의 소스 코드가 전부 문자열로 반환
            
            // function func() { return 0; }
      6. valueOf( )
        • 특정 객체의 원시 타입(primitive type)의 값을 반환한다.
        • 원시 타입의 값을 가지고 있지 않다면, 객체 자신을 반환한다.
          • function func(n) {
                this.number = n;
            }
            
            myFunc = new func(4);
            document.write(myFunc + 5);  // [object Object]5 <= 객체 자신 반환
            
            func.prototype.valueOf = function() {  // valueOf() 메소드 정의
                return this.number;
            }
            
            document.write(myFunc + 5);  // 9
    • getter와 setter 메소드 정의
      • getter
        • 특정 프로퍼티의 값을 받아오기 위한 메소드
        • 아무런 인수 전달하지 않고 호출한다.
        • var gildong = { age: 18 };
          
          document.write(gildong.age + "<br>");  //18
          
          Object.defineProperty(gildong, 
              "americanAge",
                  { 
                      get: function() {  // getter method 정의
                      return this.age-1; 
                  }
              });
              
              document.write(gildong.americanAge);  // 17
      • setter
        • 특정 프로퍼티의 값을 설정하기 위한 메소드
        • 객체의 프로퍼티 값을 변경할 때 setter메소드에 대입하고자 하는 값을 인수로 전달하여 호출
        • var gildong = { age: 18 };
          gildong.age = 20;
          document.write(gildong.age + "<br>");  // 20
          
          Object.defineProperty(gildong, 
              "changeAge", 
              { 
                  set: function(n) {  // setter method 정의
                      this.age = this.age - n;
                  }
              });
              
              
              gilgong.changeAge = 5;
              document.write(gildong.age);  //15
Designed by Tistory.