TIL [Object.create()]



Object.create()の例

let Human = function(name){ // Human함수 생성
  this.name = name;
}

Human.prototype.sleep = function(){}; // Human함수의 프로토 타입 메서드로 sleep을 생성
let steve = new Human('steve'); // steve라는 인스턴스 생성

let Student = function(name){ // Student함수 생성
  this.name = name;
}

Student.prototype.learn = function(){}; // Student함수의 프로토 타입 메서드로 learn 생성
let john = new Student('john'); // john이라는 인스턴스 생성
john.learn(); // 가능 -> Student의 인스턴스 o
john.sleep(); // 불가능 -> Human의 인스턴스 x
じゃあジョンもしsleep()を可能にしたいなら、どうすればいいですか?johnをHumanとStudentのインスタンスにするにはどうすればいいですか?
let Student = function(name){
  Human.call(this, name);
} 

Student.prototype = Object.create(Human.prototype); // Human.prototype을 기반으로 한 객체를 Student.prototype에 할당해줘!
Student.prototype.constructor = Student; // 이걸 해줘야 된다.
Student.prototype.learn = function(){}; // 그 후에 다시 learn이라는 메서드를 Student.prototype에 추가
john instanceof Student // true
john instanceof Human // true
めちゃくちゃで、見ると疲れます.これらの文法はclassですべて解決しました.
class Human{
  constructor(name){
    this.name = name;
  }
  sleep(){
    console.log('zzz');
  }
}

let steve = new Human('steve');

class Student extends Human{
  constructor(name){
    super();
    this.name = name;
  }
  learn(){
    console.log('공부중...');
  }
}

let john = new Student('john');
john.learn();
john.sleep();

john instanceof Human; // true
john instanceof Student // true
john.__proto__ === Student.prototype // true
john.__proto__.__proto__ === Human.prototype // true
一目でわかるように、きれいで簡単です.説明によると、classを使用する傾向は現在より多く(簡単で便利であるため)、以前の例では使いにくいだけでなく、消える傾向があるのは幸いなことだ.