Prototype
5462 ワード
☺️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
Reference
この問題について(Prototype), 我々は、より多くの情報をここで見つけました https://velog.io/@braveosk/Prototypeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol