Prototype


☺️TMI


私はTILが必要だと思って、ずっとブログを開発したいと思っていましたが、私は怠け者の完璧主義を持っています.
二度と見えないことを諦めて1行書くのも大事だと思います.
勉強を始める分野は先端開発素質、JS、CS知識、アルゴリズム

Prototype


原型は継承を実現するJSの中核概念である
しかし1年目の現在では、現在の業界ではほとんど原型に触れることはありません.
必要な部分はあるに違いないが、概念的に知っているだけで、必要なときに思い出すことができる.
開発の実力がまだ足りないのは事実だ😭

プロトタイプ

코드 블럭 안에 설명을 적는 이유: 프로토타입의 프로퍼티 이름은 __proto__ 인데 
마크다운 문법 때문에 진한 proto만 남는다는 사실 때문이다

JS의 객체는 [[Prototype]]이라는 숨김 프로퍼티를 갖는다 내부 프로퍼티이자 숨김 프로퍼티다
개발자도구에서 객체를 눌러서 [[Prototype]]를 확인할 수 있다
__proto__는 getter이자 setter 역할을 한다 이것으로 [[Prototype]]을 설정할 수 있다
쉽게 아래 코드부터 보자
baby의 프로토타입을 person으로 설정했기 때문에 person 객체의 프로퍼티에도 접근할 수 있다

const person = {
  brain: true,
  walk() {
    console.log('walking..');
  }
}
const baby = {
  crying() {
    console.log('응애');
  }
}
person.__proto__ = person;

baby.crying(); // 응애
baby.walk(); // walking..
if (baby.brain) {
	console.log('뇌가 있군');
} // 뇌가 있군

プロトタイプフィルタ


上記の例では、原型ふるい分けが発生し、ふるい分けがチェーンのようにつながっているので、燃焼上昇の意味で説明するのが便利です
baby.walk()を呼び出すと、babyオブジェクト内でwalk propertyが存在しないことを確認し、自分のprototype personに検索します.
JavaScriptオブジェクトには、プロトタイプとして基本オブジェクトプロトタイプがあります
したがってjavascriptでは、toString()または配列メソッドmap、reduceを宣言していません.
使用できるのも、プロトタイプオブジェクトが持つプロトタイプのためです.
オブジェクトだけでなく、配列(これも事実上のオブジェクト)にもArray Prototypeがあるので
とりあえず整理しておけばChainingはScope Chainingのように上に座る!

プロトタイプの末尾


すべてのオブジェクトは基本的にJavaScriptオブジェクトのプロトタイプです
したがって、すべてのオブジェクトでvalueOfまたはtoStringを使用できます.
上記の例では、babyはObjectprototypeにもアクセスできます.
babyがpersonを噛んでいるので、personがObjectを噛んでいます
また[prototype]には1つのオブジェクトまたは空の値しかありません
null値に遭遇すると、プロトタイプフィルタは終了します
そのため、次のような状況が発生しました.
cosnt foo = { bar: 123 };
foo.__proto__ = null;
foo.toString(); // Uncaught TypeError: foo.toString is not a function

Reference

  • https://www.javascript.info