// 생성자
var Rectangle = function (width, height) {
this.width = width;
this.height = height;
};
// (프로토타입) 메서드
Rectangle.prototype.getArea = function () {
return this.width * this.height;
};
// 스태틱 메서드
Rectangle.isRectangle = function (instance) {
return (
instance instanceof Rectangle && instance.width > 0 && instance.height > 0
);
};
var rect1 = new Rectangle(3, 4);
console.log(rect1.getArea()); // 정상 12
console.log(rect1.isRectangle(rect1)); // ❌ TypeError : not a function
console.log(Rectangle.isRectangle(rect1)); // true
인스턴스에서 직접 접근할 수 없는 메서드를 스태틱 메서드라고 한다. 스태틱 메서드는 생성자 함수를 this로 해야만 호출할 수 있다.
✔️ ES5와 ES6의 클래스 문법 비교
var ES5 = function (name) {
this.name = name;
};
ES5.staticMethod = function () {
return this.name + " staticMethod";
};
ES5.prototype.method = function () {
return this.name + " method";
};
var es5Instance = new ES5("es5");
console.log(ES5.staticMethod()); // es5 staticMethod
console.log(es5Instance.method()); // es5 method
var ES6 = class {
constructor(name) {
this.name = name;
}
static staticMethod() {
return this.name + "staticMethod";
}
method() {
return this.name + " method";
}
};
var es6Instance = new ES6("es6");
console.log(ES6.staticMethod()); // es6 staticMethod
console.log(es6Instance.method()); // es6 method
✔️ ES6의 클래스 상속
var Rectangle = class {
constructor(width, height) {
this.width = width;
this.height = height;
}
getArea() {
return this.width * this.height;
}
};
var Square = class extends Rectangle {
constructor(width) {
super(width, width);
}
getArea() {
console.log("size is :", super.getArea());
}
};