TIL 211202 : Prototype, Object


🚀What I learned


最近聴いてるノード授業があります.授業の初期に講師がJavaScriptで以下の3点を理解しなければならないと言っていましたが、私は完全に理解していません.
コンテキスト、イベントループ、プロトタイプの実行
活動サイクルも最初は理解できなかったのですが、理解するまでいろいろな資料を調べていたらいつの間にか内容が手に入りました.他の概念も理解できるまで見続けます.
実行コンテキスト
オブジェクトの作成方法
console.dir()

Obejctを作成する3つの方法


https://poiemaweb.com/js-object

1.オブジェクトの分離


**最も一般的なjavascriptオブジェクトの生成方法.クラスベースのオブジェクト向け言語に比べて、オブジェクトの作成は簡単です.カッコ({})を使用してオブジェクトを作成します.{}に1つ以上のプロパティが記述されている場合は、そのプロパティが追加されたオブジェクトを作成できます.{}に何も記述されていない場合は、空のオブジェクトが生成されます.
var emptyObject = {};
console.log(typeof emptyObject); // object
var person = {
  name: 'Lee',
  gender: 'male',
  sayHello: function () {
    console.log('Hi! My name is ' + this.name);
  }
};
console.log(typeof person); // object
console.log(person); // {name: "Lee", gender: "male", sayHello: ƒ}
person.sayHello(); // Hi! My name is Lee

2.Obejct作成者


**実際、オブジェクト文字で生成されたオブジェクトは、最終的には、オブジェクトジェネレータ関数(Built-in)を使用してオブジェクトを作成する簡略表示(short-hand)を簡略化します.すなわち、JavaScriptエンジンは、オブジェクト文字でオブジェクトを生成するコードに遭遇すると、内部でオブジェクトジェネレータ関数を使用してオブジェクトを生成します.したがって,開発者はオブジェクトジェネレータ関数を故意に使用してオブジェクトを作成する必要はほとんどない.

3.コンストラクタ


**コンストラクション関数を使用すると、オブジェクトを作成するテンプレート(クラス)のように、同じアウトラインを持つ複数のオブジェクトを簡単に作成できます.
// 생성자 함수
function Person(name, gender) {
  this.name = name;
  this.gender = gender;
  this.sayHello = function(){
    console.log('Hi! My name is ' + this.name);
  };
}
// 인스턴스의 생성
var person1 = new Person('Lee', 'male');
var person2 = new Person('Kim', 'female');

console.dir()


https://developer.mozilla.org/en-US/docs/Web/API/console/dir
console.dir()は、JSオブジェクトのプロパティを指定するインタラクティブなリストを表示します.出力は、展開された三角形を含む階層リストとして表示され、サブオブジェクトの内容を表示できます.JavaScriptオブジェクトのすべてのプロパティを指定する方法を表示します.

パラメータ(parameter,パラメータ)vsパラメータ(parament)


パラメータの関数内のメモリ領域はパラメータと同じであり、関数に渡されるパラメータはパラメータに割り当てられます.パラメータが渡されない場合、パラメータはundefinedに初期化されます.
var foo = function (p1, p2) {
  console.log(p1, p2);
};
foo(1); // 1 undefined

[[prototype]vsプロトタイプ

function Person(name) {
  this.name = name;
}
var foo = new Person('Lee');
console.dir(Person); // prototype 프로퍼티가 있다.
console.dir(foo);    // prototype 프로퍼티가 없다.
[[Prototype]]
関数を含むすべてのオブジェクトが持つIntunnelスロット.
関数オブジェクトとは、その親オブジェクトとしてのプロトタイプオブジェクトであり、関数オブジェクトは機能オブジェクトです.原型を指す.理由については、4.2コンストラクション関数で生成されたオブジェクトのプロトタイプチェーンを参照してください.
プロトタイプスキーム
関数オブジェクトのみを持つプログラム.
関数オブジェクトとは、関数によって作成されるオブジェクトの親として機能するオブジェクト(プロトタイプオブジェクト)です.