Array의 메소드 중에서 isArray는 다른 메소드들과 다르게 위 사진처럼 앞에 prototypes가 붙어 있지 않다.
prototypes이 붙어 있는 메소드와 prototypes이 없는 메소드의 차이점은 무엇인지 알아보자.
class User {
constructor(first, last) {
this.firstName = first
this.lastName = last
}
getFullName: function() {
return `${this.firstName} ${this.lastName}`
}
static isUser(user) {
if (user.firstName && user.lastName) {
return true
}
return false
}
}
const jigu = new User('jigu', 'Kim')
const neo = new User('Neo', 'Anderson')
const lewis = { name: 'lewis Yang', age: 85}
console.log(jigu)
console.log(neo)
console.log(User.getFullName) // 에러 발생 ______1
console.log(jigu.isUser) // 에러 발생 ___________2
console.log(User.isUser(jigu)) // true ________3
console.log(User.isUser(neo)) // true
console.log(User.isUser(lewis)) // false_______4
인스턴스가 아닌 User
자체에 getFullName
이라는 함수를 사용하면 1번 코드와 같이 에러가 발생한다.
인스턴스가 아닌 User에 직접 사용할 수 있는 메소드를 만드려면 이름 앞에 static
을 작성하면 되고 그것을 정적 메소드라고 한다.
이렇게 생성한 정적 메소드는 2번 코드처럼 인스턴스에 사용하면 함수가 아니라 호출할 수 없다는 메세지와 함께 에러가 발생한다.
이 정적 메소드를 3번 코드와 같이 작성하면 jigu라는 객체는 User클래스가 맞다는 것을 확인할 수 있다. 4번처럼 조건에 만족하지 않는 lewis라는 객체는 false가 출력된다.