상세 컨텐츠

본문 제목

[자바스크립트] Object.create() f랑myclass.prototype = Object.create(superclass.prototype); 가 뭐가다른가?

카테고리 없음

by esoesmio 2023. 5. 17. 11:02

본문

[자바스크립트] Object.create() f랑myclass.prototype = Object.create(superclass.prototype); 가 뭐가다른가?

 

아예 객체의 속성을 다 가져오는거랑

 

프로토타입만 가져오는게 차이일 것이다.

 

superclass = function (){
    this.a = 3;
    this.b = 15;
}
superclass.prototype.a = function (){
    console.log('haha');
};

myclass = function (){};

myclass.prototype = Object.create(superclass.prototype);
// myclass.prototype.a = 51;

console.log(myclass);
console.log(myclass.__proto__);
console.log(myclass.prototype.a);

 

위와 아래는 같다.

 

function Constructor() {}
o = new Constructor();
// 위는 아래와 같습니다:
o = Object.create(Constructor.prototype);
// 물론, 생성자 함수에 실제 초기화 코드가 있다면
// Object.create()는 그것을 반영할 수 없습니다

 

myclass = Object.create(superclass)와 MyClass.prototype = Object.create(SuperClass.prototype);는 두 가지 다른 방식으로 JavaScript의 객체 지향 프로그래밍 모델을 사용합니다. 이 두 방식의 차이점은 '객체의 생성 방식'과 '상속'에 있습니다.

  1. myclass = Object.create(superclass)그러나 이 방식은 superclass의 생성자를 호출하지 않습니다. 따라서 superclass가 생성자 함수를 통해 초기화되는 경우, 그 초기화 로직은 myclass에 적용되지 않습니다.
  2. 또한, 이 방법은 myclass가 superclass의 인스턴스가 아니라는 점을 의미합니다. myclass는 superclass의 프로토타입 체인을 통해 superclass의 속성과 메소드에 접근할 수 있지만, myclass instanceof superclass는 false를 반환합니다(여기서 superclass는 함수여야 합니다).
  3. 이 코드는 superclass라는 객체를 기반으로 새로운 객체 myclass를 생성합니다. 이를 통해 myclass는 superclass의 모든 속성과 메소드를 상속받게 됩니다. 이 경우, 상속은 프로토타입 체인을 통해 이루어집니다. superclass의 속성이나 메소드를 찾지 못한 경우, JavaScript는 myclass의 프로토타입인 superclass에서 해당 속성이나 메소드를 찾게 됩니다.
  4. MyClass.prototype = Object.create(SuperClass.prototype);이 방식은 MyClass가 SuperClass를 '확장'하는 것으로 볼 수 있습니다. 즉, MyClass의 인스턴스는 SuperClass의 모든 메소드를 사용할 수 있습니다.
  5. 그러나 이 방식은 SuperClass의 인스턴스 변수를 상속받지 않습니다. 이는 JavaScript에서 prototype을 통한 상속이 메소드만을 상속하도록 설계되었기 때문입니다. MyClass의 인스턴스를 생성할 때 SuperClass의 생성자를 호출하려면, 별도로 SuperClass.call(this) 등의 코드를 MyClass의 생성자에서 실행해야 합니다.
  6. 이 코드는 MyClass라는 생성자 함수의 프로토타입을 SuperClass의 프로토타입을 기반으로 생성한 새로운 객체로 설정합니다. 이를 통해 MyClass의 모든 인스턴스가 SuperClass의 메소드를 상속받게 됩니다.

결론적으로, myclass = Object.create(superclass)는 새로운 객체를 생성하고, 그 객체가 다른 객체의 속성과 메소드를 상속받게 하는 방법이며, `MyClass

 

댓글 영역