[Javascript] 프로토타입

JavaScript는 프로토타입 기반의 객체 지향 프로그래밍 언어입니다.

JavaScript의 모든 개체는 부모 개체에 연결되어 있습니다.

개체 지향 상속과 마찬가지로 부모 개체의 속성과 메서드가 상속되어 사용됩니다.

이 상위 개체를 프로토타입 개체(프로토타입)라고 합니다.

프로토타입이란 무엇인가 각 객체는 상위 객체를 참조합니다.

상위 개체 프로토타입그것은 말한다.

프로토타입 객체는 생성자 함수에 의해 생성된 모든 객체에 할당됩니다.

공통 속성 제공그것을 위해 그것을 사용

((원기))

모든 개체에 있는 내부 슬롯입니다.

부모 역할을 하는 프로토타입 개체를 가리킵니다.

프로토타입 속성

함수 객체만이 가지는 속성. 만들 개체의 프로토타입 개체를 가리킵니다.

객체의 프로토타입 객체는 Object.prototype입니다.

함수의 프로토타입 객체는 Function.prototype입니다.

프로토타입 체인

객체의 속성이나 메서드에 접근할 때 해당 객체에 접근할 수 있는 속성이나 메서드가 없으면 ((prototype))으로 표시된 링크를 따라 프로토타입 객체의 속성이나 메서드를 순차적으로 찾는 것을 프로토타입 체인이라고 합니다.

var student = {
  name: 'Lee',
  score: 90
}

// Object.prototype.hasOwnProperty()
console.log(student.hasOwnProperty('name')); // true

프로토타입 체인의 끝점은 Object.prototype입니다.

프로토타입 객체 확장

개인으로 생성된 모든 개체는 프로토타입 체인에서 부모 개체의 sayHello 메서드를 사용할 수 있습니다.

function Person(name) {
  this.name = name;
}

var foo = new Person('Lee');

Person.prototype.sayHello = function(){
  console.log('Hi!
my name is ' + this.name); }; foo.sayHello();

기본 유형의 확장

기본 유형은 객체가 아니므로 속성이나 메서드를 가질 수 없습니다.

그러나 기본 유형을 가진 속성이나 메소드가 호출되면 일시적으로 기본 유형과 관련된 객체로 변환되어 프로토타입 객체를 공유할 수 있습니다.

var str="apple"
console.log(typeof str); //string

var strObj = new String('apple')
console.log(typeof strObj); //string

console.log(str.toUpperCase()); //APPLE
console.log(strObj.toUpperCase()): //APPLE

str.addMethod = function(){
  console.log('str.addMethod');
}
str.addMethod(); // 에러 발생

//원시객체는 프로토타입 객체에 메소드를 추가하면 사용할 수 있음
String.prototype.customMethod = function () {
  return 'customMethod';
};
console.log(str.customMethod()); //customMethod