JavaScript

[JavaScript] Constructor 예제

SangRok Jung 2022. 4. 19. 21:33
반응형

 

 

 

예제1

원의 넓이와 둘레를 구하는 circle이라는 생성자를 만드시오.

 

 

* TIP

기본값 매개변수

기본값 함수 매개변수 (default function parameter)를 사용하면 값이 없거나 undefined가 전달될 경우 이름붙은 매개변수를 기본값으로 초기화할 수 있습니다.

function multiply(a, b = 1) {
  return a * b;
}

console.log(multiply(5, 2));
// expected output: 10

console.log(multiply(5));
// expected output: 5

 

 답)

<body>
    <script>
        const circle = function(_radius = 1)
        {
            this.radius = _radius
            this.PI = 3.14;
            
            this.getRadius = function() {
                return this.getRadius;
            }

            this.setRadius = function(_radius) {
                if ((typeof(_radius) === 'number') && (_radius > 0)){
                    this.radius = _radius;
                }
                else {
                    return false;
                }
            }

            this.getArea = function() {
                // 원의 넓이 = 원주율 * 반지름 * 반지름 
                return this.radius * this.radius * this.PI;
            }
            this.getCircum = function() {
                // 원의 둘레 = (반지름 * 2) * 원주율
                return  (this.PI * (this.radius * 2)).toFixed(2);

            }
        }

        const circle1 = new circle(10);
    

        console.log(circle1.getArea());
        console.log(circle1.getCircum())

        console.log(circle1.setRadius('234'))
        
        //314
        //62.80
        //false

    </script>
</body>

 

 

 

 

예제1+

일반 함수 호출과 생성자 호출이 가능한 원의 넓이와 둘레를 구하는 circle이라는 함수를 만드시오.

<body>
    <script>
        const circle = function(_radius = 1, cmd)
        {       //!new.target
            if (new.target) {
                this.radius = _radius
                this.PI = 3.14;
                
                this.getRadius = function() {
                    return this.getRadius;
                }

                this.setRadius = function(_radius) {
                    if ((typeof(_radius) === 'number') && (_radius > 0)){
                        this.radius = _radius;
                    }
                    else {
                        return false;
                    }
                }

                this.getArea = function() {
                    // 원의 넓이 = 원주율 * 반지름 * 반지름 
                    return (this.radius * this.radius * this.PI)
                }
                this.getCircum = function() {
                    // 원의 둘레 = (반지름 * 2) * 원주율
                    return  (this.PI * (this.radius * 2)).toFixed(3);

                }
            }
            else {
                switch(cmd) {
                    case 'area' : 
                        return _radius * _radius * 3.14;
                        break;

                    case 'circum' : 
                        return (3.14 * (_radius * 2)).toFixed(2);
                        break;

                }
            }
        }

        const circle1 = new circle(10);
        const circle2 = circle(1345, 'area');

        console.log('원1의 넓이 = ' + circle1.getArea());
        console.log('원1의 둘레 = ' + circle1.getCircum());
        console.log('원2의 넓이 = ' + circle2)

        circle1.setRadius(104) //반지름 수정

        console.log('원1의 넓이 = ' + circle1.getArea());

        console.log('원2의 둘레 = ' + circle(1535, 'circum'));
        
        //원1의 넓이 = 314
        //원1의 둘레 = 62.800
        //원2의 넓이 = 5680338.5
        //원1의 넓이 = 33962.24
        //원2의 둘레 = 9639.80
    </script>
</body>

참고

new.target

https://cruella-de-vil.tistory.com/55

 

 

[JavaScript] new.target

new.target new.target 속성(property)은 함수 또는 생성자가 new 연산자를 사용하여 호출됐는지를 감지할 수 있습니다. new 연산자로 인스턴스화된 생성자 및 함수에서, new.target은 생성자 또는 함수 참

cruella-de-vil.tistory.com

 

 

 

 

 

 

반응형

'JavaScript' 카테고리의 다른 글

[JavaScript] throw(예외 발생)  (0) 2022.04.21
[JavaScript] Class(클래스), private(접근제어)  (0) 2022.04.20
[JavaScript] new.target  (0) 2022.04.19
[JavaScript] Prototype  (0) 2022.04.19
[JavaScript] Closure(클로저) 예제  (0) 2022.04.18