[図書]ノードjs設計モード-Chapter 01-2
Node.js設計モードを読み、まとめます.
Chapter 01) Node.jsプラットフォームについて
Node.jsの哲学「Node way」 Node.jsバージョン6およびES 2015 Reactorモード-Node.js非同期アーキテクチャのキーメカニズム 全書のサンプルコードは、ES 2015(=ES 6)、Nodeに基づいている.js 6以降のバージョンに基づく の説明厳格モード:厳格モード、変数初期化、繰り返し宣言などのコード問題の厳格なチェックによって、モードを通知します. 2 関数、モジュール、ファイルユニットなどに適用
let:宣言ブロックスキャン変数 const:定数変数宣言 オブジェクトで属性を変更すると、参照属性の値が変更されるため、 というエラーは発生しません.(すなわち、Not Errorの例)は に変更されていない.モジュールを使用する場合、最良の例は であり、変数の予期しない再割り当てを回避する.
関数定義の簡潔な構文.フォーマットは で、他の言語のramフォーマットと同じです.パラメータが1で、関数の本体が1行のコード(),{}であれば、戻りは省略できます を省略することはできない.
矢印関数として定義された関数は、親ブロックの値に等しい語彙範囲(語彙範囲)にバインドされます. 従来の方法で関数を宣言すると、呼び出し時の状況に応じてこの値が変更されるため、個別のスキーマとして使用されます.
語彙範囲は他の書籍ではLexicalEnvironmentと呼ばれています.矢印関数を使用して関数を呼び出す場合、この値は親ブロックの値にバインドされず、それ自体が親ブロックの値にバインドされるため、スキャンチェーンを使用して親ブロックのthisを参照します.
使いやすい構文機能 は実際にはプロトタイプによって継承された である.クラス構文の重要な特徴はextendとスーパーキーワード拡張プロトコルタイプ を使用することである.カバー率 をサポート
クラスインスタンスはクラスオブジェクトとして表され、prototypeプロパティと
また、プライベートフィールドは
変数と関数をオブジェクトのメンバーとして指定し、オブジェクトの作成時に動的メンバー名 を定義できます. setterおよびgetter関数 Map:ES 2015は、安全で柔軟で直感的なHashMapセットの新しいプロトコルを提供します. set、get、has、deleteなどの方法は をサポートする.ループ内のすべてのエントリは、第1の要素をキーとし、第2の要素を値とする配列 である.関数は、通常のオブジェクト({})のキーが文字列に変換されるため、 とはならないMapのキーとしても使用できます.ループを実行するときに挿入順序を確認します.通常のオブジェクト({}) は常に保証されません.は、テストフレームワーク を構築するために使用することができる.
セット:すべての要素に一意の値を持つリストを作成します. add、has、delete、sizeなどの方法は をサポートする.セットのデータは重複することができず、直接データを取り出すことができない .ループのすべてのエントリには、値 があります.要素、オブジェクトおよび関数 を含むことができる
Map,Set Prototypeの「弱」バージョン MapとSetの違い WeakMap:ループを介して要素全体を参照することはできません.オブジェクトのみをキーとする WeakSet:オブジェクトのみが要素 の最大の違いは、要素であるキーまたは要素のオブジェクトが他の場所で参照されていないことであり、WeakMapおよびWeakSetのみで仮想集合 を行うことができることである.
オブジェクトに関するメタデータを格納するのに非常に有用である .文字列は、代替として を提供する.逆引用符(`)を区切り記号 として使用は、変数または式 を文字列に基本パラメータ 残りパラメータ 展開演算子 非構造化(設計) new.target(「第2章.Node.js必須モード」に含む) Proxy(「6章デザインモード」で提供) Relect Symbols
Chapter 01) Node.jsプラットフォームについて
概要
1.2 Node.js 6とES 2015
"use strict"
句を追加し、使いやすい1.2.1 let,constキーワード
// var 사용 예
if (false) {
var x = "hello";
}
console.log(x); // undefined
//------------------------------------
// let 사용 예
if (false) {
let x = "hello";
}
console.log(x); // ReferenceError: x is not defined
X -> {}, {}.name -> "John"
であり、オブジェクトは// Error
const x = 'This will never change';
x = '...'; // TypeError: Assignment to constant variable
//------------------------------------
// Not Error
const x = {}
x.name = 'John';
1.2.2矢印関数
const numbers = [2, 6, 7, 8, 1];
// 생략 가능 예
const even = numbers.filter(x => x%2 === 0);
// 생략 불가능 예
const even = numbers.filter(x => {
if (x%2 === 0) {
console.log(x + ' is even!');
return true;
}
});
語彙範囲は他の書籍ではLexicalEnvironmentと呼ばれています.矢印関数を使用して関数を呼び出す場合、この値は親ブロックの値にバインドされず、それ自体が親ブロックの値にバインドされるため、スキャンチェーンを使用して親ブロックのthisを参照します.
1.2.3類文法
class Person {
constructor (name, surname, age) {
this.name = name;
this.surname = surname;
this.age = age;
}
getFullname () {
return this.name + ' ' + this.surname;
}
static older (person1, person2) {
return (person1.age >= person2.age) ? person1 : person2;
}
}
class PersonWithMiddlename extends Person {
constructor (name, middlename, surname, age) {
super(name, surname, age);
this.middlename = middlename;
}
getFullName() {
return this.name + '' + this.middlename + '' + this.surname;
}
}
クラス構文で作成されたインスタンスは、実際に作成されたインスタンスとは異なります.クラスインスタンスはクラスオブジェクトとして表され、prototypeプロパティと
__proto__
プロパティはnullとして表されます.また、プライベートフィールドは
#field
形式(ES 2020より提供)に設定することができる1.2.4強化されたオブジェクトシリーズ
const namespace = '-webkit-';
const style = {
[namespace + 'box-sizing'] : 'border-box',
[namespace + 'box-shadow'] : '10px10px5px #888888'
};
const person = {
name: 'George',
surname: 'Boole',
get fullname () {
return this.name + '' + this.surname;
}
set fullname (fullname) {
let parts = fullname.split('');
this.name = parts[0];
this.surname = parts[1];
}
};
console.log(person.fullname); // George Boole
console.log(person.fullname = 'Alan Turing');
console.log(person.name); // Alan
1.2.5 MapとSet Collection
// Map
const profiles = new Map();
profiles.set('twitter', '@adalovelace');
profiles.set('facebook', 'adalovelace');
profiles.set('googleplus', 'ada');
profiles.size; // 3
profiles.has('twitter'); // true
profiles.get('twitter'); // "@adalovelace"
profiles.has('youtube'); // false
profiles.delete('facebook');
profiles.has('facebook'); // false
profiles.get('facebook'); // undefined
for (const entry of profiles) {
console.log(entry);
}
// Set
const s = new Set([0, 1, 2, 3]);
s.add(3);
s.size; // 4
s.delete(0);
s.has(0); //false
for (const entry of s) {
console.log(entry);
}
1.2.6 WeakMapとWeakSet Collection
// WeakMap
let obj = {};
const map = new WeakMap();
map.set(obj, {key: "some_value"});
console.log(map.get(obj)); // {key: "som_value"}
obj = undefined; // 다음 가비지 컬렉트 사이클에서 맴에 관련된 객체와 데이터가 정리됨
// WeakSet
let obj1 = {key: "val1"};
let obj2 = {key: "val2"};
const set = new WeakSet([obj1, obj2]);
console.log(set.has(obj1)); // true
obj1 = undefined; // obj1이 set에서 제거됨
console.log(set.has(obj1)); // false
1.2.7テンプレート表記法
${expression}
の形式で挿入することができる.const name = "Leonardo";
const interests = ["arts", "architecture", "science", "music", "mathematics"];
const birth = { year: 1452, place: "Florence" };
const text = `${name} was an Italian polymath interested in many topics such as ${interests.join(', ')}. He was born in ${birth.year} in ${birth.place}`
console.log(text);
1.2.8 ES 2015のその他の機能
Reference
この問題について([図書]ノードjs設計モード-Chapter 01-2), 我々は、より多くの情報をここで見つけました https://velog.io/@chyin370/도서-Node.js-디자인패턴-Chapter-01-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol